本周我浪费了大约30个小时编写和重写代码,认为我误解了OpenGL深度缓冲区是如何工作的。我试过的一切都失败了。我现在通过查找OpenGL的Android实现中的错误来解决我的问题。
请参阅此API条目:
http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml
void glClearDepth(GLclampd depth);
指定使用时的深度值 深度缓冲区被清除。该 初始值为1。
Android的实现有两个版本的命令:
glClearDepthx ,它取一个整数 值,钳位0-1
glClearDepthf 点值,钳位0-1
如果你使用 glClearDepthf(1),那么你会得到你期望的结果。如果你使用 glClearDepthx(1),那么你会得到不同的结果。 (注意1是默认值,但是使用参数1调用命令产生的结果与完全不调用它的结果不同。)我不知道发生了什么,但是深度缓冲区被清除为不同于什么的值我指定了。
答案 0 :(得分:3)
尝试将65536
传递给glClearDepthx()
。
GLfixed
是S15.16的固定点,因此1.0
由2^16
或65536
表示。
此外,您链接到常规OpenGL文档,而不是OpenGL ES 1.1文档。