游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4008|回复: 4

请问大家一个有关多纹理和顶点颜色合成的问题,急

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-5-18 22:08:00 | 显示全部楼层 |阅读模式
我在游戏的地形,使用4重纹理混合,设置的代码如下,

glActiveTextureARB(GL_TEXTURE0_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
  
//纹理1
glActiveTextureARB(GL_TEXTURE1_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);  

glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE1);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);  //SRC
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);  //DST
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE1);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);  //ALPHA



纹理2,3,和纹理1的设置类似,都是讲纹理与已经计算得出的片断进行alpha混合.

我的问题是,当我如下绘制顶点时候

glColor3f(color ,color , color);
glNormal3f(vecNormal.x , vecNormal.y , vecNormal.z);
glVertex3f(x , y , z);

我制定的颜色color只对第0层纹理有效,比如,如果我把color设置为0,5,只有第0层的纹理变黯,

另外三层的纹理仍然是狠亮的,请问我该怎么办,很急 [em7]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-5-22 21:25:00 | 显示全部楼层

Re:请问大家一个有关多纹理和顶点颜色合成的问题,急

能把每层纹理的混合参数都贴出来吗?好像是混合方式设置的不对

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-5-22 21:43:00 | 显示全部楼层

Re:请问大家一个有关多纹理和顶点颜色合成的问题,急

貌似上面的代码应该这样写吧:

glActiveTextureARB(GL_TEXTURE1_ARB);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);  

glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);  //SRC
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);  //DST
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE);  
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);  //ALPHA

GL_SOURCEi_RGB后面跟的应该是GL_TEXTURE, 而不是GL_TEXTUREi

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-5-23 00:48:00 | 显示全部楼层

Re: 请问大家一个有关多纹理和顶点颜色合成的问题,急

我的设置函数如下:           
//纹理0
        glActiveTextureARB(GL_TEXTURE0_ARB);
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
               
        //纹理1
        glActiveTextureARB(GL_TEXTURE1_ARB);
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE1);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);//SRC
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);//DST       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE1);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);//ALPHA
       
        //纹理2
        glActiveTextureARB(GL_TEXTURE2_ARB);
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);       
        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE2);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);//SRC       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);//DST       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE2);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);                //ALPHA
       
        //纹理3
        glActiveTextureARB(GL_TEXTURE3_ARB);
        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);       
        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE3);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);//SRC
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);//DST       
        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE3);       
        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);//ALPHA

我发了一张问题图片,可以看到,第1层后的纹理都没有收到顶点颜色的影响,顶点颜色我设置成了0。5
float color = 0.5;
glColor3f(color ,color , color);
glVertex3f(quad.x, quad.y, quad.z);

大家帮帮我啊
sf_200852304815.jpg

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-5-23 00:50:00 | 显示全部楼层

Re:请问大家一个有关多纹理和顶点颜色合成的问题,急

补充一下,以上出问题的几个三角形中,灰色的是第0层纹理,绿色的是第1层,
顶点颜色设置为0。5,但是绿色的纹理没有受到其影响。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 11:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表