0

OpenGL ゲームに壁のパターンDrawWallと飛行機があります。DrawAirplane現在のマトリックスをプッシュ アンド ポップして、シーン内の壁だけを移動するにはどうすればよいですか?

飛行機は直ると思います。

private: void DrawWall(){
    glPushMatrix(); 
    glBegin(GL_POLYGON); 
    LeftWallPattern();
    glEnd();
    glBegin(GL_POLYGON);
    RightWallPattern();
    glEnd();
    glPopMatrix();
}

private: void DrawAirplane(){ 
    glPushMatrix(); 
    glBegin(GL_LINE_LOOP);
    //...
    glEnd();
    glPopMatrix();
}

public: void Display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glTranslatef(0, -0.02, 0);
    DrawWall();
    DrawAirplane();
    glFlush();
}
4

2 に答える 2

2

を使用glPushMatrix()して、現在のマトリックスをプッシュしglTranslate、壁を作成して描画し、次にglPopMatrix()平面を描画します。これは、壁のみを移動する必要があります。DrawWall問題は、本来あるべき場所ではなくディスプレイで翻訳を行っているように見えることです。

于 2013-06-18T21:55:27.290 に答える
1

イエスが言われたことを拡張するためのいくつかのこと.

飛行機を描くときは、それに変換を適用したくないので、恒等行列をロードする必要があります。

Push the current modelview matrix
Load the identity matrix <=== this is the step you're missing
Draw the airplane
Pop the modelview matrix

現在の変換を適用する壁を描画するときは、現在のマトリックスをプッシュしないでください。そうしないと、構築したすべての変換が消去されます。

Remove the Push/Pop operations from DrawWall()

が初めて呼び出される前の初期化のある時点でDisplay、モデル ビュー マトリックスを単位マトリックスに設定する必要があります。その後の の呼び出しごとDisplayに、y 方向の平行移動に -0.02 が追加されます。

于 2013-06-19T14:44:10.807 に答える