【发布时间】:2014-09-06 20:10:42
【问题描述】:
我正在开发一款多平台游戏。它使用 OpenGL ES 2.0,整个场景在 iOS 和使用 Mali 的 OpenGL ES 模拟器的窗口上渲染得非常好。
我最近将它移植到 Mac OSX。我必须做的唯一改变是让 glCompileShader 忽略 lowp、mediump 和 highp。除此之外,除了所有模型由内而外渲染外,大多数情况下似乎一切正常。
我尝试了以下方法来修复它,但没有任何运气..
完全禁用剔除 在前、后、前和后之间切换剔除模式 将正面切换为 CW 和 CCW
启用、禁用深度缓冲区 为 depthfunc 尝试 less、greater、lequal 和 gequal 在投影矩阵中反转近远距离
我唯一能想到的另一件事是惯用手。我的场景是在左手坐标系中创作的。我最终翻转了视图矩阵的 z 轴来补偿它。因此,在 OSX 上,我尝试翻转视图矩阵并尝试使用 LH 和 RH 投影矩阵组合,结果表现如预期,但模型由内向外渲染。
此时我完全被难住了。
OpenGL ES 和 OpenGL 之间的某些默认状态似乎不同。 想法?
【问题讨论】:
-
很奇怪。通常,只要您使用通用的功能子集,代码就应该顺利进行。看起来一切都被转换到屏幕上的错误位置吗?还是只有正面和背面翻转?还是事情在正确的地方,但只有深度测试无法正常工作?
-
嗯,一切都是一种疯狂的猜测,但我认为您已验证您确实有一个深度缓冲区?
-
你是对的,我用来设置我的 open gl 上下文的示例代码忘记初始化深度缓冲区。这就是问题所在。
标签: macos opengl opengl-es-2.0