Android OpenGL ES中未正确显示的纹理和颜色

Android OpenGL ES中未正确显示的纹理和颜色,android,opengl-es,colors,textures,Android,Opengl Es,Colors,Textures,我一直在关注at的教程,但遇到了一个问题 我成功地使以下两个示例都起作用: 2.7示例5:3D形状-旋转颜色立方体和棱锥体(Nehe第5课:3D形状) 示例2:Cube2.java 2.8示例6:纹理(Nehe第6课:纹理) 但当我尝试绘制彩色立方体和纹理立方体时,我得到以下结果: (图片的第一部分) 彩色立方体不可见,但剪辑纹理立方体,并且纹理立方体的纹理由彩色立方体的最后一种颜色(黄色)着色 我基本上只是用以下方法绘制两个立方体: // ----- Render the Color C

我一直在关注at的教程,但遇到了一个问题

我成功地使以下两个示例都起作用:

2.7示例5:3D形状-旋转颜色立方体和棱锥体(Nehe第5课:3D形状) 示例2:Cube2.java

2.8示例6:纹理(Nehe第6课:纹理)

但当我尝试绘制彩色立方体和纹理立方体时,我得到以下结果:

(图片的第一部分)

彩色立方体不可见,但剪辑纹理立方体,并且纹理立方体的纹理由彩色立方体的最后一种颜色(黄色)着色

我基本上只是用以下方法绘制两个立方体:

  // ----- 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:Photo cube”部分添加第三个所谓的“Photo cube”

(只能发布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\u TEXTURE\u 2D)
,然后在绘制下一个纹理立方体之前重新启用它


第二:不,这是正确的方法(尽管你可能想要
1,1,1,1
,而不是
1,1,1,0
,以防你想做任何有透明度的事情)。另外,还有一种方法可以通过将颜色状态推到OpenGL堆栈上并在以后弹出来实现,尽管这种方法已被弃用,不应使用。

非常感谢!问题确实出在这个问题上。我的代码与教程中的绘图函数几乎相同,所以我没有费心发布它,但下次我会发布!glColor重置颜色的方法对我来说似乎有点奇怪,但如果它是这样做的话,我想没有太多的事情要做!谢谢,我正在寻找一种清除颜色的方法,你的1,1,1,1方法非常有效。