私は大きなプラットフォームとキャラクターが複数のキューブで構成されている3Dプラットフォームに取り組んでいます。このキューブのグループを中心にどのように回転させるのですか?
しかし、文字キューブのY軸を回転しようとすると、中心点で回転しません。彼らは巨大な円の中でプラットフォームの周りを周回するだけです。私はglRotatefの順序が間違っていると推測していますが、キューブのグループを中心点の周りだけに回転させるためには、どのような順序にする必要があるのか分かりません。
それらを描画するための私のコードは次のとおりです。
for (int i = 0; i < Models.size(); i++){ // theres only one model this has to go through that stores the group of cubes for the character
glPushMatrix(); // set rotation for the whole group (I would expect...)
glRotatef(Models.at(i)->ModelRotation.X,1,0,0);
glRotatef(Models.at(i)->ModelRotation.Y,0,1,0);
glRotatef(Models.at(i)->ModelRotation.Z,0,0,1);
for (int j = 0; j < Models.at(i)->Parts.size(); j++) // For each cube in the character,
Models.at(i)->Parts.at(j)->Render(); // draw the cube
glPopMatrix();
}
モデルは単に「ModelRotation」と呼ばれるのVector3と文字のためのすべてのキューブを保存する「部品」と呼ばれる法線ベクトルを持つ構造体です。キューブクラスのキューブをレンダリングするための
My機能は次のとおりです。
void Render(){
glPushMatrix();
glTranslatef( Position.X,
Position.Y,
Position.Z
);
glColor3f( Color.R,
Color.G,
Color.B
);
glScalef( Size.X,
Size.Y,
Size.Z
);
// Render the front quad
//glBindTexture(GL_TEXTURE_2D, Faces[0]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1, 0); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1, 1); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0, 1); glVertex3f( 1.0f, 1.0f, -1.0f);
glEnd();
// Render the left quad
//glBindTexture(GL_TEXTURE_2D, Faces[1]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 0); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1, 1); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0, 1); glVertex3f( 1.0f, 1.0f, 1.0f);
glEnd();
// Render the back quad
//glBindTexture(GL_TEXTURE_2D, Faces[2]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 0); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 1); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0, 1); glVertex3f(-1.0f, 1.0f, 1.0f);
glEnd();
// Render the right quad
//glBindTexture(GL_TEXTURE_2D, Faces[3]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1, 0); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 1); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0, 1); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();
// Render the top quad
//glBindTexture(GL_TEXTURE_2D, Faces[4]);
glBegin(GL_QUADS);
glTexCoord2f(0, 1); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0, 0); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1, 0); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1, 1); glVertex3f( 1.0f, 1.0f, -1.0f);
glEnd();
// Render the bottom quad
//glBindTexture(GL_TEXTURE_2D, Faces[5]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0, 1); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 1); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1, 0); glVertex3f( 1.0f, -1.0f, -1.0f);
glEnd();
glPopMatrix();
};
すべてのヘルプは非常に高く評価されるだろう。 私はそれが単なる単純な間違いだと思っています。 必要な場合は、さらにコードを表示します。
おかげ
移動'glTranslatef'操作の後、' render'関数へ 'glRotatef'操作を実行します – Rabbid76
[マルチパートオブジェクトの回転]の可能な複製(https://stackoverflow.com/questions/46720166/rotating-a-multipart-object) – Rabbid76