【发布时间】:2011-06-09 21:39:18
【问题描述】:
这周我浪费了大约 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 调用命令会产生与根本不调用它不同的结果。)我不知道到底发生了什么,但是深度缓冲区被清除为一个与实际不同的值我已经指定了。
【问题讨论】:
-
谢谢。这真的很有帮助。
标签: android opengl-es depth depth-buffer