【问题标题】:OpenGL ES 2.0 on iOS ported to OpenGL on Mac OS X rendering models inside outiOS 上的 OpenGL ES 2.0 移植到 Mac OS X 上的 OpenGL 渲染模型由内而外
【发布时间】: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


【解决方案1】:

发现问题。我没有有效的深度缓冲区。出于某种原因,我用来设置 OpenGL 上下文的示例代码忘记了深度缓冲区。

感谢 Reto Koradi 指出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多