2011-11-20 32 views
1

我在這裏變得非常絕望。我使用Xcode,試圖在iPhone上實現一些OpenGL的東西。我必須爲Phong-Lighting編寫一個Shader。我儘可能地聲明瞭我的幾何(頂點,索引,計算等),並將各自的參數作爲屬性傳遞給着色器(用GLSL編寫)。使用這些屬性效果很好,一些真正的基礎着色器程序能夠正確編譯並提供預期的輸出。GLSL:iPhone應用程序無法訪問的內置屬性?

現在我試着從一些更高級的計算開始,爲此我需要使用GLSL的一些內置屬性,即「g​​l_NormalMatrix」,但每當我嘗試時,程序崩潰,我收到「錯誤:0:3:使用未聲明的標識符'gl_NormalMatrix'」。 無論何時使用任何內置屬性,例如gl_Vertex,gl_Normal等,它都會發生同樣的情況。

這些屬性在iPhone上的GLSL中不可用還是我錯過了某些內容?也許我還沒有完全理解它是如何工作的。如前所述,將我自己的頂點屬性傳遞給着色器效果很好,我也想知道程序應該如何「自己」「知道」正確的值 - 所以內置屬性的整個概念仍然有點混亂我。但是,無論何時我嘗試運行一些着色器時,我都會在網上發現它,看看是否發生了什麼,即使其他人似乎在編寫着色器時廣泛使用內置屬性,也會引發這些錯誤。

我真的很希望這裏有人能夠對此有所瞭解。千先謝謝!

Julia

回答

7

無論是在iPhone還是其他地方,GL ES都無法使用這些屬性。 WebGL也是如此。您需要編寫自己的矩陣代碼,或者如果僅支持iOS 5+,則使用GLKit,併爲自己提供屬性。對於什麼使它成爲ES 2.0一個令人難以置信的簡明摘要見Kronos' reference card - 除其他事項外它列出了所有可用的內置特殊變量爲:

  • GL_POSITION
  • gl_PointSize
  • gl_FragCoord
  • gl_FrontFacing
  • gl_PointCoord
  • gl_FragColor
  • gl_FragData [n]的

GLKit的數學內容非常好,因爲它內嵌並使用了ARM的NEON SIMD單元。我認爲在所有新的GL項目中將iOS 5指定爲最低限度是充分的理由。

+0

謝謝,這的確有很大的意義。 – Julia

+0

謝謝,我一直在尋找這些一段時間。 – sooon