1

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

draw_voxel立方体を描画する関数があります:

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して一番上のマトリックスを変換します。ただし、すべての立方体は引き続き (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 マトリックス スタックに関する有用な情報を見つけることができませんでした。キューブが変換されるようにトップ マトリックスを「適用」するにはどうすればよいですか?

4

1 に答える 1

1

GLKMatrixStackの使用方法をまだ完全には理解していませんが、コードを見ると、スタックの最上位のマトリックスがシェーダーに渡されていないか、GLKitの言葉で言えば、効果が適切に構成されていないことが問題だと思います。 。おそらく、ある時点で次のようなことをする必要があります。

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

この助けを願って、私もそのスタックで立ち往生しています:)

于 2012-04-09T16:16:59.920 に答える