2

(0,0,0) が画面の左下隅に対応し、(480,640,0) が画面の右上隅に対応する単純な正射影を使用する 2D OpenGL アプリがあるとします。

ここで、2D アプリを少し 3D にしたいとします。つまり、画面の上から物が落ちてくるような小さな 3D 効果を導入します。これを行うには、通常のレンダリング平面 (z=0) 上のすべてが、正射影が使用されていたときと同じに見える透視投影が必要です。

そのような投影を作成する方法を知っている人はいますか? 数学は私を少し超えているようです。おそらく、視錐台の遠平面を z=0 にしたいと考えています。ここで、(0,0,0) は左下のピクセルに対応しますが、glFrustum() などでは近平面の座標しか指定できません。適切なニア値とファー値を選択するにはどうすればよいですか? glFrustum() と gluLookAt() を使用して画面上のある点から原点を見てみましたが、どのように視点を選択すればよいでしょうか?

4

1 に答える 1

0

私はそれを解決したと思います。以下は私のために働きます。

esMatrixLoadIdentity(projMatrix);
esMatrixLoadIdentity(modelViewMatrix);
float w = screen.width;  // 480
float h = screen.height; // 640
int height = 20;
float nw = w/height;  // width of near plane
float nh = h/height;  // height of near plane
esFrustum(projMatrix, -nw/2, nw/2, -nh/2, nh/2, 1.0f, 1.0f + height);
esMatrixLookAt(modelViewMatrix, 0,0, height, // eye = above the origin 
               0,0, 0,                    // looking at the midpoint on the plane Z=0
               0,1, 0);
esTranslate(modelViewMatrix, -w/2, -h/2, 0); // adjust so (0,0,0) is now bottom left pixel and on the far plane z=0
于 2013-08-03T09:54:14.573 に答える