我有一个iPhone(OpenGL ES 1.1)应用程序,可以对纹理进行一些渲染。我正在设置一个framebuffer对象,并使用glFramebufferTexture2D将纹理附加到它。
除了在绘制到此帧缓冲对象时光线方向相反时,一切正常。我正在指定这样的指示:
float theDirection[4] = { x, y, z, 0 }
glLightf( lightIndex, GL_POSITION, theDirection )
在没有帧缓冲对象的情况下渲染时,我所有的光线方向都是正确的。当使用framebuffer对象进行渲染时,我必须否定方向以使事物看起来相同。
作为旁注,当我在带有iOS 3.2的iPhone 3G上运行时,灯光方向也会反转(有或没有帧缓冲对象)。如果我在4.x上运行iPhone或iPad,则光线方向不会反转。
有什么想法吗?
答案 0 :(得分:0)
奇怪的是,这里的解决方案是启用GL_CULL_FACE。如果在使用OpenGL ES 1.1的MonoTouch项目中禁用GL_CULL_FACE,则GL照明方向(对于方向GL_LIGHT0)将在某些设备或OS版本上被否定,我不确定是哪个。
基于xcode的C ++项目没有这个问题。无论您的GL_CULL_FACE设置如何,OpenGL ES 1.1 xcode都会在我测试的所有设备和操作系统版本中一致地投射光。
与C ++ xcode项目中相同GL代码的结果相比(无论GL_CULL_FACE如何,设备都是一致的),以下是我在MonoTouch中看到倒置照明的设备:
运行iOS 3.1.2的iPhone 3G上的照明正确。
我向Novell发布了一个错误报告:https://bugzilla.novell.com/show_bug.cgi?id=679896