2

假设我有一个 2D OpenGL 应用程序,它使用简单的正交投影,其中 (0,0,0) 对应于屏幕的左下角,(480,640,0) 对应于右上角。

现在说我想让我的 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 回答