我在这里真是绝望。我使用Xcode,试图在iPhone上实现一些OpenGL。我必须为Phong-Lighting编写一个着色器。我尽力声明了自己的几何形状(顶点,索引,计算等),并将各个参数作为属性传递给着色器(用GLSL编写)。使用这些属性可以正常工作,某些真正的基本着色器程序可以正确编译并提供预期的输出。
现在,我尝试从一些更高级的计算开始,对于这些计算,我需要使用GLSL的一些内置属性,即“gl_NormalMatrix”,但是每当尝试执行该操作时,程序就会崩溃,并且我得到一个“错误:0:3:使用未声明的标识符'gl_NormalMatrix'“。
每当使用任何内置属性(例如gl_Vertex,gl_Normal等)时,它都会相同地发生。
这些属性在iPhone上的GLSL中不可用,还是我缺少某些东西?也许我还没有完全了解它是如何工作的。如前所述,将我自己的顶点属性传递到着色器中可以很好地工作,而且我还想知道程序应该如何“自行”“知道”正确的值-因此内置属性的整个概念仍然有些令人困惑。我。但是,每当我尝试运行一些我在网上发现的着色器以查看是否发生任何事情时,都会抛出这些错误,即使其他所有人在编写着色器时似乎都大量使用内置属性。
我真的希望这里有人能对此有所启发。提前致谢!
朱莉亚
最佳答案
这些属性在GL ES中不可用,无论是在iPhone还是其他地方。 WebGL也是如此。您需要编写自己的矩阵代码,或者如果仅支持iOS 5+,则使用GLKit,并为您自己提供属性。有关使它成为ES 2.0的内容的简明扼要的摘要,请参见Kronos' reference card,其中列出了所有可用的内置特殊变量,其中包括:
GLKit的数学知识非常好,因为它可以内联并使用ARM的NEON SIMD单元。我认为在所有新的GL项目中至少指定iOS 5为充分理由。
关于iphone - GLSL:iPhone应用程序无法访问内置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205501/