【发布时间】:2011-08-20 20:07:56
【问题描述】:
我一定是在问一个非常基本的问题。我刚刚学会了如何应用纹理。
基本上,我有一个场景(一架飞机)和一个立方体。我将纹理应用到立方体的一个面。我尝试将纹理应用到的立方体的面是红色的,但我希望纹理颜色覆盖它,但它们以某种方式混合在一起,虽然 我没有启用混合,纹理图像也没有透明!
这是我的纹理(.png)。
这是渲染图:
这是我的代码的一些相关部分(我知道我做错了很多事情,比如使用三角形条而不是四边形,不使用 HLSL 等 - 我是新手 :)
初始化部分:
//glInit
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glDisable(GL_BLEND); //<-- blending is disabled!
纹理部分:
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 4, tex.width(), tex.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
绘图部分:
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1, 0, 0); //red front face
glTexCoord2d(0, 0);
glVertex3d(-a, -a, -a);
glTexCoord2d(0, 1);
glVertex3d(-a, -a, a);
glTexCoord2d(1, 0);
glVertex3d(a, -a, -a);
glTexCoord2d(1, 1);
glVertex3d(a, -a, a);
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0, 1, 0); //green back face
glVertex3d(-a, a, -a);
glVertex3d(-a, a, a);
glVertex3d(a, a, -a);
glVertex3d(a, a, a);
glEnd();
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0, 0, 1); //blue right face
glVertex3d(a, -a, -a);
glVertex3d(a, -a, a);
glVertex3d(a, a, -a);
glVertex3d(a, a, a);
glEnd();
//etc.
那么,你能帮我让我的纹理的颜色保持不变而不是变红吗?如果需要我的代码的任何其他部分来理解我做错了什么,只要说,我会编辑。非常感谢您。
【问题讨论】:
标签: c++ qt opengl textures alphablending