【问题标题】:Android depth buffer issue: Advice for anyone experiencing problemAndroid 深度缓冲区问题:给遇到问题的人的建议
【发布时间】: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


【解决方案1】:

尝试将65536 传递给glClearDepthx()

GLfixed 是 S15.16 定点,所以1.02^1665536 表示。

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

【讨论】:

  • 这会产生预期的结果。谢谢你。文档确实应该更清楚。我注意到 ES 1.1 站点还声明 glClearDepthx() 的最大值是 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多