我试图理解OpenGL中坐标系统的基本概念,所以我一直在网上制作测试应用程序。
目前,我使用简单的坐标:
在屏幕上绘制了一个简单的Square -1.0f, 1.0f, 0.0f, // 0, Top Left
-1.0f, -1.0f, 0.0f, // 1, Bottom Left
1.0f, -1.0f, 0.0f, // 2, Bottom Right
1.0f, 1.0f, 0.0f, // 3, Top Right
在我的应用程序中,我运行以下代码:
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
我的基本理解是代码将观察端口角度设置为45度,窗口大小的宽高比例。
我正在做的另一件事是将观察位置设置为Z轴上的-4个单位:gl.glTranslatef(0, 0, -4);
这就是景观中的结果......
在肖像......
我的问题是:
协调系统如何工作,一个单位代表多少个像素?如何改变方向和宽高比影响方程?
如果我想绘制一个屏幕尺寸的正方形,其视口为45度,观察位置为z-4 ......如何计算所需的宽度和高度单位?
答案 0 :(得分:2)
我会尽力回答。
没有任何理由改变宽高比或45度角。按照它的方式进行操作可以防止物体以不寻常的方式水平或垂直拉伸。因为您正在使用透视视图,所以您的深度为3D空间,与没有深度的正交视图相对应。在做glTranslatef(0,0,-4)时你实际做的是改变MODELVIEW Matix,在负z方向移动它4,大概是在实际绘制正方形之前。默认情况下,“相机”位于0,0,0,Y(向上)为向上方向。
您可以将3D空间转换为像素,但使用透视视图类型,我完全不确定您是否真的想要或需要。然而,2D正交视图将是一个不同的故事,因为许多人也使用OpenGL进行2D游戏。想要一个与屏幕尺寸完全相同的正方形,正交可能是要走的路,你应该可以通过一些谷歌搜索来计算你的像素密度到2d空间比较。