4

XZ 平面に楕円を描き、視点を Y 軸上でわずかに上に設定し、Z 軸に戻して、楕円の中心を 45 度の角度から見て、gluPerspective() を使用して視錐台を設定します。 .

楕円

回転していない楕円の長軸は、ビューポートの幅全体に及びます。視線を中心に 90 度回転すると、楕円の長軸がビューポートの高さになり、楕円が変形します (この場合、偏心が少なくなります)。

回転楕円

この変形を防ぐ (または少なくともそれを説明する) にはどうすればよいでしょうか? 視線を中心とした回転で、楕円の認識された主軸が保持されるようにします (この場合、ビューポートを超えてしまいます)。

4

3 に答える 3

5

gluPerspective() を呼び出すとき、アスペクトとして 1.0 を使用しているようです。幅/高さを使用する必要があります。たとえば、ビューポートが 640x480 の場合、アスペクト引数として 1.33333 を使用します。

于 2008-09-17T02:51:34.500 に答える
3

OpenGL仕様によると:

void gluPerspective( GLdouble fovy,
                     GLdouble aspect,
                     GLdouble zNear,
                   GLdouble zFar )

アスペクトは、ウィンドウの幅と高さの関数でなければなりません。具体的には、幅を高さで割った値です (ただし、0 による除算に注意してください)。

おそらく、ウィンドウが正方形でない限り正確ではないアスペクトとして 1 を使用しています。

于 2008-09-17T02:53:25.807 に答える
1

gluPerspective呼び出しのアスペクトパラメータを微調整する必要があるようです。マンページを参照してください。ウィンドウが物理的に正方形の場合、アスペクト比は1になり、問題は解決します。ただし、ウィンドウは長方形であるため、表示錐台は非正方形である必要があります。

アスペクト比をwindow_width/window_heightに設定すると、楕円が正しく表示されます。ウィンドウのサイズが変更されるたびにこれを更新する必要があることに注意してください。GLUTを使用している場合は、glutReshapeFuncを設定し、そこで射影行列を再計算します。

于 2008-09-17T02:58:10.863 に答える