2009-07-14 7 views
2

OpenGL ES 2.0で、あなたは明らかにモデル行列を設定するView/Model/ProjectionマトリックスをOpenGL ES 2.0の頂点シェーダに渡すにはどうしたらいいですか?

glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

、それ以上を行うことはできませんが、GLSL specは、頂点シェーダでそれらにアクセスする方法を説明しますので、私は、これらの行列はまだ何とかで構築されていると思います。

// 
// Matrix state. p. 31, 32, 37, 39, 40. 
// 
uniform mat4 gl_ModelViewMatrix; 
uniform mat4 gl_ProjectionMatrix; 
uniform mat4 gl_ModelViewProjectionMatrix; 

どのようにこれらの値をシェーダに渡しますか?どういうわけかglUniformMatrix4fvを使用しますか?

OpenGL ES 2.0 Programming Guideのソースコードは、シェーダ部分に役立ちましたが、すべての例では、マトリックス変換をそのまま残して、頂点が-1.0と1.0の間にあることを確認しています。

UPDATE:唯一の答えはglGetUniformLocationglUniformMatrix4fvを使用して、下記のリンクされたコードで行ったように、独自のカスタムモデル/ビュー/投影行列を定義することですので、明らかOpenGL ES Shader Languageは、gl_ModelViewMatrixのような事前定義されたエントリをサポートしていません。 。私はOpenGL Shader Builder をサポートしているので混乱しましたが、これはOpenGL ESではなく、普通のOpenGLです。

答えて

1

彼のコメントによると、this linkは彼の問題を解決するのに十分な情報を与えました。

+0

私は固定機能のパイプラインを使いたくありません。私が望むならば、私はOpenGL ES 1.1を使い続けることができますが、頂点シェーダとフラグメントシェーダを実験しようとしています。 –

+0

申し訳ありませんが私はより多くの助けができません。 Appleから更新されたサンプルコードを探してみるかもしれません。 このサンプルコードが役立つかどうかわかりません。 http://mgrundmann.com/2009/06/24/simple-opengl-es-20-iphone-example/ – Mark

+0

リンクありがとうございます!彼は、組み込みのものを使用するのではなく、モデルと投影行列のための独自のシェーダー変数を定義することで解決します(つまり、独自の名前を定義し、glUniformを使用して値を更新します)。おそらく、OpenGL ES 2.0のiPhone版には組み込まれていないかもしれません。いずれにせよ、これは私に働くいくつかのコードを書くための回避策で十分です... –

0

gl_ModelViewProjectionMatrixは、「OpenGL ESシェーディング言語バージョン1.00」の仕様には含まれていません。多くのシェーディング言語仕様があるようですので、混乱の原因になっている可能性があります。私が理解しているように、あなたは行列保管のための独自のユニフォームを定義します。

関連する問題