私は今週末にOpenGLの学習を開始し、かなりの学習曲線を発見しました。私がなんとか取り組んできたほとんどのこと、しかし今私は立ち往生しています...
頂点の配列を作成しました。各頂点(vertexT)は、3つのベクトル(位置、法線、色)で構成されています。各ベクトル(GLKVector3)は、フロートのトリプル(つまり、x、y、zまたはr、g、b)です。GLKVector3は色に適用できるように定義されているので、openglは3番目のフロート(つまりアルファ)を指定しない色の値で問題なく動作すると想定しています。
glオブジェクトを設定する関数は次のようになります。glBindVertexArrayOES(_vertexArrayObject);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexT) * _vertexCount, [_vertexData mutableBytes], GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)));
ここまでは順調ですね。インターリーブされた配列の色の部分を使用しておらず、描画関数で次の呼び出しを使用して、オブジェクト全体が白でレンダリングされます。
glBindVertexArrayOES(_vertexArrayObject);
glDrawElements(GL_TRIANGLES, _triangleCount * 3, GL_UNSIGNED_SHORT, [_triangleData mutableBytes]);
モデルに頂点ごとの色を設定したいので、次を追加しました。
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)*2));
しかし、それはまだ白いです。私はなんとか私の問題のように聞こえるSOに関する質問を見つけることができましたが、提供された解決策はGL_COLOR_MATERIALでglEnableを呼び出すことであり、私が知る限り、この定数はOpenGL ESでは無効です(Khronosのsdkページによる)。
簡単なことだと思います。しかし、私はそれを見ていません。少しの援助?