首先,你设置了3D投影的投影和模型观察矩阵:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fov, ratio, near_clip, far_clip);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(eyex, eyey, eyez, lookatx, lookaty, lookatz, upx, upy, upz);
gluLookAt需要3个载体,该相机的“眼睛”的位置,看看点和“向上矢量”。如果您调用gluLookAt(0.0,0.0,-10.0,0,0,0,0,1,0),则表示摄像机坐标为0,0,-10,并沿着z轴观察原点0,0,0并且“向上”沿着正Y轴。如果你那么做一个简单的绘制调用OpenGL的一个四,它应该在你的渲染显示:
glColor3f(1.0f,1.0f,1.0f); //set white color (or any contrast to your background)
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f,-1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glEnd();
你要么在顺时针或逆时针顺序绘制,而不是在那些的组合。您可以使用glEnable/Disable(GL_CULL_FACE)和glCullFace控制剔除。
窗口大小为800×600,我想框是整个窗口,以便
当您正在使用的2D投影(正投影)工作,你可以轻松地设置你的坐标系统相匹配的尺寸大小你的窗口/视口。这在3D投影中不适用,因为边界现在是3D viewing frustrum,或者是从近剪辑到远剪辑平面的3D音量。然后通过模型 - 视图 - 投影矩阵将坐标投影到2D表面上。您可以轻松输入宽度为800和高度为600的四个坐标,但要查看它,您需要远离相机以捕捉整个四边形。从评论
引用:
gluPerspective(45.0f,(双)W /(双)H,1.0F,100.0f)应该设定邻近= 1和远= 100的透视图。但是因为openGL是右手的,所以正面的z不在屏幕上,所以接近的距离应该是100,最远的距离是1。它没有意义..
应答(见上文3D观看截链路):
甲视锥是场景中的位于相对于视口的照相机的3D体积。体积的形状影响模型如何从摄像机空间投影到屏幕上
因为这是除去你的“大家”。 http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/93989#93989请注意,您可以在您自己的问题 – Hasturkun
你基本上发表评论询问变换如何工作以及透视投影如何工作。这对于答案来说太复杂了,但[我的教程涵盖了它](http://www.arcsynthesis.org/gltut/)(以及更多)。请注意,虽然它适用于初学者,但它使用着色器并避免固定功能。 –
谢谢:) @NicolBolas我读到的转换和观点对谷歌一点点,但它似乎很愚蠢,或我必须说不是真的有用。渲染管道有一些阶段,等等,将其转换为-1和1等等。我没有发现任何重要的,因为除了-1和1之外什么都没有提到。这让我发疯了......反正我也会看看你的啧啧,我希望我找到一些东西。非常感谢 – Dimitris