【问题标题】:Const positioned light with GLKBaseEffect使用 GLKBaseEffect 的常量定位光
【发布时间】:2012-12-18 12:17:06
【问题描述】:

我需要使用 GLKBaseEffect 设置 const 聚光灯位置:所以当我更改模型视图时,灯光会停留在同一个位置。我怎样才能做到这一点?

【问题讨论】:

    标签: glkit light glkbaseeffect


    【解决方案1】:

    当您使用 GLKBaseEffect 设置灯光的位置时,它使用当前存储在其 modelviewMatrix 属性中的值。因此,您需要将该值设置两次,一次用于灯光,一次用于您的对象:

    self.effect.transform.modelviewMatrix = GLKMatrix4Identity;
    self.effect.light1.position = GLKVector4Make(0.0, 1.0, 3.0, 1);
    
    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -3.0f);
    modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, GLKMathDegreesToRadians(90), 0, 1, 0);
    self.effect.transform.modelviewMatrix = modelViewMatrix;
    

    这应该可以解决问题

    【讨论】:

    • 嗯。解决方案对我来说是错误的。似乎后续的模型视图修改也会影响光线(对于 OpenGL 1.0,它是例外,GLKBaseEffect 试图模拟它)。
    • 我会看看,但在我的项目中,当在绘图函数中声明时,它工作正常。我承认我主要使用 OpenGL ES 2.0 着色器正是因为我知道我的代码在做什么。尽管 GLKBaseEffect 模拟了 OpenGL ES 1.1,但很多实现细节都相当棘手和隐藏。一路着色器!
    • 非常同意你的看法。但现在我只是想节省时间:我不懂 GLSL,只想尽快制作第一个应用版本。
    【解决方案2】:

    在这里对我有帮助的唯一解决方案是制作自己的着色器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2012-08-04
      • 2012-06-11
      • 1970-01-01
      相关资源
      最近更新 更多