OpenGL纹理映射的几个问题

今天在绘制颜色表的时候,出现两个小问题:

目的是根据一个特定的颜色表,用图像方式将颜色表绘制出来,根据给定的颜色表,我应该绘制出如下的图像才对:OpenGL纹理映射的几个问题 - 语过添情 - VTK,Cg,GL,C++,三维可视化

1、我的颜色表绘制出来的图像如下:

OpenGL纹理映射的几个问题 - 语过添情 - VTK,Cg,GL,C++,三维可视化

可以看到颜色变化趋势大体是正确的,但是颜色明显不对。这个问题纠缠了我一个多小时,后来才发现我在绘制前使用了一句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);

时,也就是先指定纹理坐标时,结果为:

OpenGL纹理映射的几个问题 - 语过添情 - VTK,Cg,GL,C++,三维可视化

当代码是:

glVertex3d(-20,0,z);   glTexCoord1d(0.0);     
    glVertex3d(20,0,z);   glTexCoord1d(0.5);    时,也就是后指定纹理坐标时,结果为:

OpenGL纹理映射的几个问题 - 语过添情 - VTK,Cg,GL,C++,三维可视化

通过与volview软件对比,我发觉先指定纹理坐标时对的,翻阅了Opengl红宝书,发觉书上都是先指定纹理坐标,但是没有任何地方(也许是我没发觉)     说到纹理坐标必须在顶点坐标之前指定。这个问题,我只知其然不知其所以然,希望有人看到后能帮我解释一下,呵呵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值