我一直在跟随http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_3D.html上的教程学习,但遇到了一个问题。
我已经成功运行了以下两个示例:
2.7 示例5:3D形状-旋转彩色立方体和金字塔(Nehe Lesson 5: 3D Shapes) 示例2:Cube2.java
2.8 示例6:纹理(Nehe Lesson 6: Texture)
但当我尝试绘制彩色立方体和带纹理的立方体时,出现了以下问题: http://i.imgur.com/Smbsa.png (图片的第一部分)
彩色立方体是不可见的,但它会裁剪纹理立方体,而纹理立方体的纹理被彩色立方体的最后颜色(黄色)染色。
我基本上只是用以下方式绘制这两个立方体:
我尝试添加一个所谓的“照片立方体”,这个立方体是来自于“2.9 示例6a:照片立方体”部分。
以下纹理不再着色,但这感觉像是一种粗略的去除过去颜色的方法。
当我移除:
我已经成功运行了以下两个示例:
2.7 示例5:3D形状-旋转彩色立方体和金字塔(Nehe Lesson 5: 3D Shapes) 示例2:Cube2.java
2.8 示例6:纹理(Nehe Lesson 6: Texture)
但当我尝试绘制彩色立方体和带纹理的立方体时,出现了以下问题: 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);”之外,有没有更好的方法来“清除”以前立方体/物体的颜色?