3

这周我浪费了大约 30 个小时来编写和重写代码,我认为我误解了 OpenGL 深度缓冲区的工作原理。我尝试的一切,都失败了。现在,我通过查找 OpenGL 的 Android 实现中可能存在的错误解决了我的问题。

请参阅此 API 条目:

http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml

void glClearDepth(GLclampd 深度);

指定清除深度缓冲区时使用的深度值。初始值为 1。

Android 的实现有两个版本的这个命令:

  • glClearDepthx采用整数值,钳位为 0-1

  • glClearDepthf采用浮点值,钳位为 0-1

如果你使用glClearDepthf(1)那么你会得到你期望的结果。如果您像我一样使用glClearDepthx(1),那么您会得到不同的结果。(请注意,1 是默认值,但是使用参数 1 调用命令会产生与根本不调用它不同的结果。)我不知道到底发生了什么,但是深度缓冲区被清除为一个与实际不同的值我已经指定了。

4

1 回答 1

3

尝试传递65536glClearDepthx().

GLfixed是 S15.16 定点,所以1.02^16或表示65536

此外,您链接到常规 OpenGL 文档,而不是OpenGL ES 1.1文档。

于 2011-01-16T07:48:47.290 回答