0

64x64x64の立方体の中にたくさんの点を描いていますが、立方体の中心を中心に回転するように原点を移動する方法がわかりません。私の頂点データは、{(0,0,0)、(0,0,1)、...、(63、63、63)}から始まる1D配列内に格納されます。

これは、フレームごとにマトリックスを設定するための現在のコードです。

// Set ProjectionMatrix
projectionMatrix = glm::perspective(90.0f, (GLfloat)width / (GLfloat) height,0.1f, 1000.f);
glUniformMatrix4fv(location_projectionMatrix, 1, GL_FALSE, glm::value_ptr(projectionMatrix));

// Set ModelViewMatrix
glm::mat4 identity = glm::mat4(1.0);
glm::mat4 viewTranslate = glm::translate(identity, glm::vec3(0.0f, 0.0f, -translate_z));
glm::mat4 viewRotateX   = glm::rotate(viewTranslate, rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 viewRotateY   = glm::rotate(viewRotateX, rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
modelViewMatrix = viewRotateY;
glUniformMatrix4fv(location_modelViewMatrix, 1, GL_FALSE, glm::value_ptr(modelViewMatrix));

立方体を-32だけxおよびy方向に変換しようとしましたが、成功しませんでした。

4

1 に答える 1

2

行列演算は非可換です。つまり、最初に平行移動を実行してから回転を実行することは、回転を実行してから平行移動を実行することと同じではありません。通常、順序は:scale->rotation->translationです。代わりにこれを試してください:

glm::mat4 viewRotateX   = glm::rotate(identity, rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 viewRotateY   = glm::rotate(viewRotateX, rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4 viewTranslate = glm::translate(viewRotateY   , glm::vec3(0.0f, 0.0f, -translate_z));
于 2013-01-11T10:15:02.747 に答える