2012-04-07 8 views
1

私は画面に多くの立方体を描画するiOSゲームを作成していますが、立方体の配置に問題があります。GLKMatrixStackの使い方は?

void draw_voxel(Point location, Color color, GLKMatrixStackRef stack) { 
    GLKMatrixStackPush(stack); 
    GLKMatrixStackTranslate(stack, location.x, location.y, location.z); 

    std::array<Color, 36> triangle_colors; 
    triangle_colors.fill(color); 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, static_cast<const GLvoid*>(triangle_vertices.data())); 
    glEnableVertexAttribArray(GLKVertexAttribColor); 
    glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, 0, static_cast<const GLvoid*>(triangle_colors.data())); 
    glDrawArrays(GL_TRIANGLES, 0, 36); 
    glDisableVertexAttribArray(GLKVertexAttribPosition); 
    glDisableVertexAttribArray(GLKVertexAttribColor); 

    GLKMatrixStackPop(stack); 
} 

私はそれがGLKMatrixStackRef、一番上に現在のマトリックスを押してトップ行列を変換するためにGLKMatrixStackTranslateを使用して渡します

私はキューブを描画する機能draw_voxelを持っています。ただし、すべてのキューブはまだ(0、0、0)で描画されます。

私はこのようなdraw_voxelを呼び出す:

[self.effect prepareToDraw]; 

GLKMatrixStackRef stack = GLKMatrixStackCreate(nullptr); 
draw_voxel(Point(-1.0f, 0.0f, 0.0f), Color(1.0f, 0.0f, 0.0f, 1.0f), stack); 
draw_voxel(Point(+0.0f, 0.0f, 0.0f), Color(0.0f, 1.0f, 0.0f, 1.0f), stack); 
draw_voxel(Point(+1.0f, 0.0f, 0.0f), Color(0.0f, 0.0f, 1.0f, 1.0f), stack); 
CFRelease(stack); 

私はGLKit行列スタックについて、インターネット上の任意の有用な情報を見つけることができなかった、と私は本当にこだわっています。どのようにしてキューブが翻訳されるようにトップマトリックスを適用しますか?

答えて

1

私はGLKMatrixStackの使い方をまだ完全には把握していませんが、あなたのコードを見ると、スタックのトップ・マトリックスをシェーダーに渡さない、またはGLKitの言葉では、効果を適切に設定する。 おそらく、あなたのような何かをやるべきいくつかの点で:

self.effect.transform.modelviewMatrix = GLKMatrixStackGetMatrix4(stack); 

・ホープこのヘルプ、私は

+0

:)あまりにもスタックにこだわっている。そしてちょうど '-prepareToDraw'を送信し、飛び出る後スタックは同じ、右か?私は引数として 'draw_voxel'にその効果を渡すだけです。 –

+0

実際に、私はあなたが達成しようとしていることをよく分かりません。それぞれのレンダリングパスで新しいスタックを作成し、それを使って1つの変換を計算し、トップマトリックスをポップするだけです。私が理解する限り、マトリックススタックは階層的アニメーションシステムで有用です。おそらく 'GLKMatrix4MakeTranslate'呼び出しで必要な' GLKMatrix4'を取得できます。 – Germano