|
|
发表于 2009-7-11 16:54:00
|
显示全部楼层
Re:纹理和光照的混合
依然一片漆黑有很多种原因,但是这个问题和标题关系模糊。
造成一片漆黑有可能有以下情况:
1,确定GL_MODELVIEW和GL_PROJECT矩阵或者矩形坐标是否设置正确,即矩形是否可见。如果设置错误,即使你其他都设置正确,画的东西很可能在屏幕外面,看不见自然正常。你可以把矩形设成其它颜色达到检测目的。
2,确定启用了纹理,纹理创建正确,坐标设置正确,在创建纹理后,调用glGetError看下又没有错来检验。
3,确定纹理的配置是否正确,如果你前面都没问题,画不出来东东,那么这里要好好检查下。一般来说,纹理创建后都会做如下几个设置,1)纹理的过滤方式(最近点还是线性插值,对于使用了MIPMAP的纹理,还有更多的设置),2)纹理坐标大于1的时候的显示方式(拉伸还是重复),3)纹理与原顶点颜色的混合方式(覆盖,贴花,调整,融合)。
如果你只是为了显示出一个图片的话,并且矩形大小和纹理大小一样,用如下设置即可:
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexEnvf(GL_TEXTURE_2D,GL_TEXTURE_EVN_MODE,GL_REPLACE);
就可以了。
函数的意义和参数意义请参照opengl的文档,篇目有限,不列了。如果没启用光照,那么相关检查就到此为止了。
光照和纹理设置没有关系。初步估计,你应该是没设置正确的纹理与原顶点颜色的混合方式。如果使用默认的,那就是“调整”方式,你顶点颜色黑的,不做其他设置,再怎么“调”也是黑的。你设置成白色如果能看到纹理的话自然就是这个问题了.
至于你的标题,纹理和光照的混合- -!纹理和光照都对最后片元产生影响。但是是2个步骤。在设置了光源后,顶点的法向量会影响顶点颜色,在光栅化后,多边形内部的颜色自然会受到光照的影响。就比如说你一件白衣服在红光下照射,白衣服上面所有白色顶点都受到了红光的影响。处理完后是红色顶点。然后你的白衣服上面有花纹,好比使用了纹理。这时候片元(就是屏幕上最后的像素)颜色是红色了,而不是白色,经过和纹理的处理后得到最后的颜色。你设置替换,碰巧纹理是朵黄菊,那么最后结果就是红衣黄菊。设置了调整或者融合,那可能就是朵橙菊。具体橙到什么程度,和你菊花黄到什么程度以及是调整还是融合有关 =,-!
|
|