0

表示機能に次の OpenGL コードがあります。

glLoadIdentity();
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
// called as: gluLookAt(20, 5, 5, -20, 5, 5, 0, 1, 0);

axis();
glutWireCube (1.);

glFlush ();

axis()(0,0,0) から (10,0,0)、(0,10,0) および (0,10,0) への線と、(1,0,0) から (1, 3,0)。

私の reshape 関数には次のものが含まれています。

glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45.0, (GLsizei) w / (GLsizei) h, 1.0, 100.0);
glMatrixMode (GL_MODELVIEW);

1.このイメージは、への引数として を使用してプログラムを実行した結果を示していglutWireCubeます。

glutWireCube(1.)

ご覧のとおり、キューブは (0,0,0) を中心としていません。ドキュメントには次のように記載されています。

立方体はモデリング座標の原点を中心にしています (...) (ソース)

引数としてプログラムを実行すると5.、立方体はさらに移動します。

glutWireCube(5.)

それはなぜですか? (0,0,0) の周りにキューブを配置するにはどうすればよいですか?

さらに詳しい情報

axis()との順番を入れ替えても構いませんglutWireCube。で囲んaxis()glPushMatrix()glPopMatrix()直らない。

解決

gluPerspectiveカメラから遠くを見るように変更したところ、Z バッファリングが適切に機能するようになり、立方体が原点の周りに配置されていることが明らかになりました。

4

2 に答える 2

1

axis がビュー マトリックスを台無しにしていませんか?

立方体の描画後に呼び出すとどうなりますか?

編集して追加:

実は・・・写真をよく見ると、原点中心にあるように見えます。

立方体の中心は、3 つの軸の交点と正確に一致しているように見えます。疑わしいと思われる唯一の点は、赤い線が白いエッジを上書きしていないことです。Zバッファリングが適切に設定されていますか?

于 2009-12-03T11:08:22.250 に答える
0

そうかもしれませんが、遠近感があるので判断しづらいと思いますが… もう少し凝視しているわけではないのではないでしょうか。

モデル ビュー マトリックスを変更していないことをすばやく除外するにaxis()は、呼び出しをマトリックス プッシュ/ポップで囲みます。

glPushMatrix();
axis();
glPopMatrix();

調査/確認事項:

  1. これは窓全体ですか?視界が一隅に下がっているのは奇妙に思えます。
  2. レンダリングの前に増加する回転を追加すると役に立ちますか? これにより、より多くの手がかりが得られるため、パースペクティブを判断しやすくなります。
  3. 引数をgluLookAt()動的に変更することで、「カメラ」を動かしてみることができます。
于 2009-12-03T11:12:11.447 に答える