2011-03-09 14 views
2

をしたいときGLColorPointerは色の虹を作成します。私は、これはすべて赤で私のオブジェクトをレンダリングすることを期待するオープンGLES 1.1 - 私はちょうど私がこのようなオブジェクトをレンダリングしています赤

for (int i = 0; i < COLOR_ARRAY_SIZE; i += 4) { 
    colors[i] = 1.0f; 
    colors[i + 1] = 0.0f; 
    colors[i + 2] = 0.0f; 
    colors[i + 3] = 1.0f; 
} 

// Clear color and depth buffer 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Set GL11 flags: 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 

glEnable(GL_DEPTH_TEST); 

// make sure nothing messes with the colour 
glDisable(GL_BLEND); 
glDisable(GL_DITHER); 
glDisable(GL_FOG); 
glDisable(GL_LIGHTING); 
glDisable(GL_TEXTURE_2D); 
glShadeModel(GL_FLAT); 

// Load projection matrix: 
glMatrixMode(GL_PROJECTION); 
glLoadMatrixf(projectionMatrix); 

// Load model view matrix and scale appropriately 
int kObjectScale = 300f; 
glMatrixMode(GL_MODELVIEW); 
glLoadMatrixf(modelViewMatrix); 
glTranslatef(0.5f, 0.5f, 0.5f); 
glScalef(kObjectScale, kObjectScale, kObjectScale); 

// Draw object 
glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &vertexPositions[0]); 
glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &vertexNormals[0]); 
glColorPointer(4, GL_FLOAT, 0, (const GLvoid*) &colors[0]); 
glDrawElements(GL_TRIANGLES, 11733, GL_UNSIGNED_SHORT, 
     (const GLvoid*) &indices[0]); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 
glDisableClientState(GL_COLOR_ARRAY); 

、代わりにそれはですさまざまな色の虹。なぜ誰が知っていますか?私は "色"の配列バッファに何か問題があると推測しますが、私の人生はそれが何であるか見ることができません。実際の頂点はうまく描画されているようです。

答えて

1

あなたのforループは非常に混乱しています。毎回あなたの値を4ずつ増やしています。さらに、3-5行目の1,2、および3のオフセットでインデックスを作成しています。 COLOR_ARRAY_SIZEの定義が4であると推測しますか?次のように色の配列を初期化してみてください。そして、

float colors[] = {1.0f, 0.0f, 0.0f, 1.0f};

、次のようにglColorPointerを呼び出す:

glColorPointer(4, GL_FLOAT, 0, colors);

私はあなただけの色配列場合は0にストライドを設定したお知らせ色が含まれているので、なぜストライドを使用する必要があるのか​​わかりません(ストライドは、配列内に織り込まれた情報をジャンプするために使用されます)。

+0

私は間違って実験をしている間にストライドを1に設定し、投稿する前にそれを変更するのを忘れました、残念です - それを変更します。その方法でcol​​ors配列を塗りつぶして、各頂点の赤を表すR、G、B、Aの値のバッファを取得します。私は色を混乱させる理由をデバッグできるようにこれをやっています。最終的に私は本当の色配列のためにこの "赤"バッファを交換したいと思っています。 COLOR_ARRAY_SIZE == 15644. –

+0

素晴らしいです。喜んで助けてください。 :) –

+0

それは動作する必要がありますか?私はストライドを0に戻して、まだ多色効果を得ています。確かに私の配列を1.0,0.0,0.0,1.0で塗りつぶすと、各頂点の赤が表示されますか? –

関連する問題