1

私は今週末に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ページによる)。

簡単なことだと思います。しかし、私はそれを見ていません。少しの援助?

4

1 に答える 1

2

最終的に、GLKitでカラーマテリアルを有効にする方法を見つけました。

この行はトリックを行います:

self.effect.colorMaterialEnabled = GL_TRUE;
于 2012-10-02T11:23:31.177 に答える