2011-11-13 46 views
0

这是我在很长一段时间 (几十个小时)在谷歌,但我仍然 还没有解决它令我沮丧的东西。我对openGL相当陌生,在过去的2-3个月里,我开始在网上阅读教程 ,并试用了一些代码。 我的主要问题是,当我从正交投影移动到透视 我一直在爆炸如何管理和绘制一个简单的形状在屏幕上。我对矩阵知之甚少,但事情是在投影中,我指定了对象的x,y,z坐标,这些坐标是 。从角度来看,我还没有看到如何应用坐标 。我已经看到范围从-1到1,甚至-20到20等。我读过,你可以指定openGL上的坐标,但我应该怎么做? 在正交我这样做:关于坐标透视的OpenGL帮助

窗口大小是800×600 我想框是整个窗口 所以,

glVertex2i(0, 600); 
glVertex2i(0, 0); 
glVertex2i(800, 0); 
glVertex2i(800, 600); 

但对于投影? 当我把1放在窗口的末端,-1开始。 opengl如何决定窗口的开始/结束以及它为什么是-1到1? 这是该死的混乱,如果有人可以帮助我,我真的很感激它。 谢谢。

+0

因为这是除去你的“大家”。 http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/93989#93989请注意,您可以在您自己的问题 – Hasturkun

+0

你基本上发表评论询问变换如何工作以及透视投影如何工作。这对于答案来说太复杂了,但[我的教程涵盖了它](http://www.arcsynthesis.org/gltut/)(以及更多)。请注意,虽然它适用于初学者,但它使用着色器并避免固定功能。 –

+0

谢谢:) @NicolBolas我读到的转换和观点对谷歌一点点,但它似乎很愚蠢,或我必须说不是真的有用。渲染管道有一些阶段,等等,将其转换为-1和1等等。我没有发现任何重要的,因为除了-1和1之外什么都没有提到。这让我发疯了......反正我也会看看你的啧啧,我希望我找到一些东西。非常感谢 – Dimitris

回答

1

首先,你设置了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体积。体积的形状影响模型如何从摄像机空间投影到屏幕上

+0

我知道这一切关于设置,我的主要问题就是屏幕从-1到1,而不是我设置它的大小(例如,800×600)。 – Dimitris

+0

啊,现在我明白你的问题,我会更新我的答案 – edvaldig

+0

嗯,这样意味着,如果我输入我想要的坐标为四(800×600在这种情况下)我必须设置gluLookAt坐很远? – Dimitris