【问题标题】:OpenGL light direction reversed while drawing into a framebuffer texture绘制到帧缓冲区纹理时,OpenGL 光方向反转
【发布时间】:2011-02-10 18:12:47
【问题描述】:

我有一个 iPhone (OpenGL ES 1.1) 应用程序,它可以对纹理进行一些渲染。我正在设置一个帧缓冲区对象并使用 glFramebufferTexture2D 将纹理附加到它。

一切都很好,只是在绘制到这个帧缓冲区对象时光的方向是相反的。我正在指定这样的光线方向:

float theDirection[4] = { x, y, z, 0 }
glLightf( lightIndex, GL_POSITION, theDirection )

在没有帧缓冲对象的情况下渲染时,我所有的光线方向都是正确的。使用帧缓冲区对象进行渲染时,我必须否定 theDirection 以使事物看起来相同。

附带说明,当我在装有 iOS 3.2 的 iPhone 3G 上运行时,光线方向也会反转(有或没有帧缓冲区对象)。如果我在 4.x 的 iPhone 或 iPad 上运行,灯光方向不会反转。

有什么想法吗?

【问题讨论】:

    标签: iphone iphone-sdk-3.0 ios4 opengl-es


    【解决方案1】:

    奇怪的是,这里的解决方案是启用 GL_CULL_FACE。如果在使用 OpenGL ES 1.1 的 MonoTouch 项目中禁用了 GL_CULL_FACE,那么在某些设备或操作系统版本上,GL 照明方向(对于定向 GL_LIGHT0)将被否定,我不确定是哪个。

    基于 xcode 的 C++ 项目没有这个问题。无论您的 GL_CULL_FACE 设置如何,OpenGL ES 1.1 xcode 项目都能在我测试过的所有设备和操作系统版本上一致地点亮。

    与 C++ xcode 项目中相同 GL 代码的结果相比(无论 GL_CULL_FACE 为何,这在设备间都是一致的),以下是我在 MonoTouch 中看到的倒置照明设备:

    • 运行 iOS 4.2.1 的 iPad
    • 运行iOS 4.2的iOS模拟器
    • 运行 iOS 4.2.1 的 iPhone4

    运行 iOS 3.1.2 的 iPhone 3G 上的照明正确

    我向 Novell 发布了错误报告:https://bugzilla.novell.com/show_bug.cgi?id=679896

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多