我一直在关注 http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_3D.html 上的教程我遇到了一个问题。
我已经设法使以下两个示例都起作用:
2.7 示例 5:3D 形状 - 旋转颜色立方体和金字塔(Nehe 第 5 课:3D 形状) 示例 2:Cube2.java
2.8实例6:纹理(Nehe第6课:纹理)
但是当我尝试同时绘制彩色立方体和纹理立方体时,我得到以下信息:
http://i.imgur.com/Smbsa.png (图像的第一部分)
彩色立方体是不可见的,但会剪切纹理立方体,并且纹理立方体的纹理由彩色立方体的最后一种颜色(黄色)着色。
我基本上只是用以下方法绘制两个立方体:
// ----- Render the Color Cube -----
gl.glLoadIdentity(); // Reset the model-view matrix
gl.glTranslatef(0.0f, 0.0f, -6.0f); // Translate right and into the screen
gl.glScalef(0.5f, 0.5f, 0.5f); // Scale down (NEW)
gl.glRotatef(angleCube, 1.0f, 1.0f, 0.0f); // rotate about the axis (1,1,1) (NEW)
cube.draw(gl); // Draw the cube (NEW)
// Update the rotational angle after each refresh (NEW)
angleCube += speedCube; // (NEW)
// ----- Render the Texture Cube -----
gl.glLoadIdentity(); // Reset the model-view matrix
gl.glTranslatef(-1.0f, 0.0f, -6.0f); // Translate right and into the screen
gl.glScalef(0.5f, 0.5f, 0.5f); // Scale down (NEW)
gl.glRotatef(angleCube, 1.0f, 1.0f, 0.0f); // rotate about the axis (1,1,1) (NEW)
texturecube.draw(gl); // Draw the cube (NEW)
我尝试从“2.9 示例 6a:照片立方体”部分添加第三个所谓的“照片立方体”。
(只能发2个链接查看上面的imgur链接)
我补充说:
gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
到纹理立方体,注意到蓝色“溢出”到照片立方体。
当我添加时:
gl.glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
以下纹理不再着色,但这感觉像是一种去除过去颜色的粗略方法..
当我移除时:
texturecube.loadTexture(gl, context); // Load image into Texture (NEW)
photocube.loadTexture(gl); // Load image into Texture (NEW)
gl.glEnable(GL10.GL_TEXTURE_2D); // Enable texture (NEW)
这发生了:
(只能发2个链接查看上面的imgur链接)
颜色立方体回来了,所有其他表面都是彩色的。
我的问题:
当彩色立方体消失时,我做错了什么? (我想应该可以同时使用纹理和颜色)
除了“gl.glColor4f(1.0f, 1.0f, 1.0f, 0.0f);”之外,是否有更好的方法来“清除”先前立方体/对象的颜色?
最佳答案
您的问题非常详细,这很好,但如果您发布绘图部分的完整代码示例会有所帮助。我很难猜测您可能正在做什么会导致问题。
无论如何,我会尝试你的两个问题:
首先:我的猜测是您在绘制彩色立方体之前不会禁用纹理。但是您没有完整的代码,所以我不能肯定地说。在渲染第二个立方体之前调用 glDisable(GL_TEXTURE_2D)
,并在绘制下一个带纹理的立方体之前重新启用它。
第二:不,这是正确的方法(尽管您可能想要 1,1,1,1
,而不是 1,1,1,0
万一您想透明地做任何事情)。或者,有一种方法可以通过将颜色状态推送到 OpenGL 堆栈并稍后弹出它来实现,尽管这种方法已被弃用且不应使用。
关于android - 纹理和颜色在 OpenGL ES 中显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603071/