C++ で OpenGl 機能を使って立体立方体を描画しようとしていますが、 などの任意の位置に描画したいと考えていglVertex3f(20,5,-35)
ます。指定された位置に立体立方体を描くにはどうすればよいですか?
質問する
5624 次
2 に答える
2
glTranslatef(x, y, z)。ググってみると、2D版もあると思います。しかし、これはスタックから参照フレームを変換します。より複雑な変換を設定する必要がある場合は、glpopmatrix と glpushmatrix を呼び出す必要があります。それらのスペルと使用法に注意してください。
于 2012-05-18T19:04:05.690 に答える
2
質問に一致し、OpenGL (互換性プロファイル) で立方体を描画するには、次のコードを使用できます。
void drawCube(float x, float y, float z)
{
glBegin(GL_QUADS);
glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
glVertex3f(1.0f+x, -1.0f+y, -1.0f+z);
glVertex3f(1.0f+x, 1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, -1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);
glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
glVertex3f(1.0f+x, 1.0f+y, -1.0f+z);
glEnd();
}
この機能はお勧めしません。代わりに、glTranslatef(x, y, z)
別の回答に記載されているソリューションを使用してください。この関数のように:
void drawCube(float x, float y, float z)
{
glPushMatrix();
glTranslatef(x, y, z);
glBegin(GL_QUADS);
glVertex3f(-1.0f,-1.0f ,-1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f ,1.0f );
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glEnd();
glPopMatrix();
}
この機能は完璧にはほど遠いですが、十分なはずです。ハッピーコーディング!
于 2012-05-18T20:02:40.700 に答える