我正在学习OpenGL,而且我对设置顶点数据位置感到有点困惑。
例如, 我想画一个300mm x 300mm的矩形,据我所知,我可以假设1个OpenGL单位= 1 mm然后我设置这样的顶点数据:
data = [-0.5, 0.5, # top left
-0.5, -0.5, # bottom left
0.5, 0.5, # top right
0.5, -0.5] # bottom right
因此矩形大小为1个OpenGL单位或1mm(如果我没错),然后使用模型矩阵将其缩放300个。
或者我可以这样设置:
data = [ 0.0, 300.0, # top left
0.0, 0.0, # bottom left
300.0, 300.0, # top right
300.0, 0.0] # bottom right
矩形尺寸为300 OpenGL单位或300mm。
我不知道哪种方法是正确的。
请你指点我正确的方向。
由于
答案 0 :(得分:1)
OpenGL坐标没有"单位"。
在标准化设备坐标(NDC)中,在原点周围的2X2X2框(或2X2X1)中,无论哪个片段被栅格化并结束,都是可以映射到窗口坐标并将被写入帧缓冲区的片段(假设他们通过了深度测试)。你做什么来获取片段取决于你。
从你的问题我理解你正在谈论正交投影,在这种情况下检查你的正投影矩阵,它定义了"屏幕边缘的坐标"。因此,您的顶点的实际长度单位'坐标是投影和物理屏幕尺寸的函数。
我强烈建议阅读有关从顶点坐标到屏幕位置的转换的简单方法。例如。 http://www.songho.ca/opengl/gl_transform.html,略显过时,但很好地涵盖了这个想法。
另请查看http://www.songho.ca/opengl/gl_projectionmatrix.html,特别是有关正交投影的部分。它应该让您了解如何构建具有您选择的底部,左侧,右侧和顶部坐标的正投影矩阵。