首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纹理和颜色没有在OpenGL ES中正确显示

纹理和颜色没有在OpenGL ES中正确显示
EN

Stack Overflow用户
提问于 2012-05-15 14:36:25
回答 1查看 2.2K关注 0票数 3

我一直在学习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 (图像的第一部分)

彩色立方体是不可见的,但是剪辑纹理立方体和纹理立方体的纹理被颜色立方体的最后一种颜色(黄色)着色。

我基本上是用以下两个方块画出来的:

代码语言:javascript
复制
  // ----- 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“中添加第三个所谓的”照片立方体“。

(只能发布2条链接,查看上面的链接)

我补充说:

代码语言:javascript
复制
 gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

到纹理立方体,并注意到蓝色“溢出”到照片立方体。

当我加上:

代码语言:javascript
复制
 gl.glColor4f(1.0f, 1.0f, 1.0f, 0.0f);

以下纹理不再着色,但这感觉像是去除过去颜色的一种粗糙方法。

当我移除:

代码语言:javascript
复制
  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条链接,查看上面的链接)

彩色立方体回来了,所有其他的表面都是彩色的。

我的问题:

当彩色立方体消失时,我做错了什么?(我想应该可以同时使用纹理和颜色)

除了"gl.glColor4f(1.0f,1.0f,1.0f,0.0f)“之外,是否有更好的方法”清除“以前的立方体/对象的颜色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 17:01:16

您的问题是非常详细的,这是好的,虽然它会有帮助,如果你张贴完整的代码样本,您的绘图部分。我很难猜到你在做什么会导致这个问题。

不管怎么说,我会试试你的两个问题:

首先:我的猜测是,在绘制彩色立方体之前,不要禁用纹理。但你没有完整的密码,所以我不能肯定地说。在呈现第二个多维数据集之前调用glDisable(GL_TEXTURE_2D),并在绘制下一个纹理多维数据集之前重新启用它。

第二:不,这是正确的方法(虽然您可能需要1,1,1,1,而不是1,1,1,0,以防您想要透明地做任何事情)。或者,有一种方法可以通过将颜色状态推到OpenGL堆栈上,然后弹出它,尽管这是不推荐的,不应该使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10603071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档