今天在绘制颜色表的时候,出现两个小问题:
目的是根据一个特定的颜色表,用图像方式将颜色表绘制出来,根据给定的颜色表,我应该绘制出如下的图像才对:
1、我的颜色表绘制出来的图像如下:
可以看到颜色变化趋势大体是正确的,但是颜色明显不对。这个问题纠缠了我一个多小时,后来才发现我在绘制前使用了一句glColor3f(0,1,0);这个去掉之后结果就对了。当然如果将这个改成glColor3f(1,1,1)结果也是对的,但是如果里面的参数不是1,1,1结果就不对。这是为什么呢,后来看到纹理函数这节时,明白了,原来纹理颜色会和物体本身颜色进行一个运算,然后将结果作为最后的颜色,因此,如果指定了物体的颜色,那么绘制结果不一定就是纹理的颜色。可以使用glTexEnv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE)来强制丢弃物体本身颜色,这样就能达到绘制的结果只是纹理的颜色,这个函数中最后一个参数还可以是:GL_ADD,GL_DECAL,GL_MODULATE,GL_COMBINE等,分别代表将纹理值和物体本身颜色进行不同的运算。
2、当我将顶点的空间坐标和纹理坐标的指定顺序颠倒时,发现结果页颠倒了,具体情况如下:
当代码是:
glTexCoord1d(0.0); glVertex3d(-20,0,z);
glTexCoord1d(0.5); glVertex3d(20,0,z);
时,也就是先指定纹理坐标时,结果为:
当代码是:
glVertex3d(-20,0,z); glTexCoord1d(0.0);
glVertex3d(20,0,z); glTexCoord1d(0.5); 时,也就是后指定纹理坐标时,结果为:
通过与volview软件对比,我发觉先指定纹理坐标时对的,翻阅了Opengl红宝书,发觉书上都是先指定纹理坐标,但是没有任何地方(也许是我没发觉) 说到纹理坐标必须在顶点坐标之前指定。这个问题,我只知其然不知其所以然,希望有人看到后能帮我解释一下,呵呵