0

シーンに 2 つの四角形を描きましたが、今は 1 つの四角形を他の四角形の周りに回転させようとしています。

「左キー」を押すと、最初の長方形が他の方向に移動しますが、他の長方形の方向に直線で移動するだけなので、回転の効果はありません。

最初の長方形の Z 方向を変更するにはどうすればよいですか?

tl;dr: 太陽系のようなものですが、どうすれば深度効果が得られるのかわかりません。

GLUT と OpenGL を使用しています。

編集:詳細情報:

これは私の現在のコードです(シーンを表示する関数):

void RenderScene(void){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor3f(1.0f, 0.0f, 0.0f); 

    glPushMatrix();

    glTranslatef(-70.0f, 0.0f, 0.0f);
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f); 
    glPopMatrix();

    glColor3f(1.0f, 1.0f, 0.0f);

    glPushMatrix();
    glTranslatef(xCor, 0.0f, 0.0f);
    glRectf(-25.0f, 25.0f, 25.0f, -25.0f);
    glPopMatrix();

    glFlush(); 
}

そして役立つ画像:

ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

1

深度テストを有効にして、オブジェクトを他のオブジェクトよりも隠してください。遠くのオブジェクトに高い値の z 値を与えます。

glEnable( GL_DEPTH_TEST );
glClear( GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

glPushMatrix();

glTranslatef(-70.0f, 0.0f, 0.0f);
glRectf(-25.0f, 25.0f, 25.0f, -25.0f); 
glPopMatrix();

glColor3f(1.0f, 1.0f, 0.0f);

glPushMatrix();
glTranslatef(xCor, 0.0f, 0.0f);
glRectf(-25.0f, 25.0f, 25.0f, -26.0f); // Z value of behind object is set far from eye
glPopMatrix();
于 2013-05-26T18:46:43.930 に答える
1

やりたいことは適度に複雑です。

3 空間で四角形を見つける唯一の方法は、次のように glVertex3f() を使用してそれらを構築することです。


glBegin(GL_QUADS);  
    glVertex3f(x0, y0, z0);  
    glVertex3f(x1, y1, z1);
    glVertex3f(x2, y2, z2);  
    glVertex3f(x3, y3, z3);  
glEnd();

あなたの「太陽系」は、画面座標に配置する必要があります: X->左/右、Y->上/下、Z->画面の中/外。周回の効果を作成するには、移動の増分ごとに 4 つの X と Z をすべて再計算する必要があります。

別のビューを表示したい場合は、gluLookAt() を使用することもお勧めします。

glPerspective() のマニュアル ページには、zNear は常に正であると書かれていますが、負の数を指定しています。周回するのが見えるまで、その行をコメントアウトしたままにします。

HTH。

于 2013-05-26T21:09:12.473 に答える