假设我有一个2D OpenGL应用程序,它使用简单的正交投影,其中(0,0,0)对应于屏幕的左下角,而(480,640,0)对应于右上角。
现在说我想让我的2D应用程序有点3D,即引入一些3D效果,例如从屏幕上方落入到位的东西。要做到这一点,我需要一个透视投影,其中通常的渲染平面(z = 0)上的所有内容看起来都与使用正交投影时相同。
任何人都知道如何创建这样的投影?数学似乎略微超出我的范围。据推测,我希望我的视锥体的远平面为z = 0,其中(0,0,0)对应于左下角的像素,但glFrustum()等只允许我指定近平面的坐标。我如何选择合理的近距离和远距离值?我已经尝试使用glFrustum()和gluLookAt()从屏幕上方的某个点查看原点,但我该如何选择眼点呢?
答案 0 :(得分: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