如何在OpenGL中为对象设置单位

时间:2017-09-02 15:01:36

标签: opengl pyopengl opengl-4

我正在学习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。

我不知道哪种方法是正确的。

请你指点我正确的方向。

由于

1 个答案:

答案 0 :(得分:1)

OpenGL坐标没有"单位"。

在标准化设备坐标(NDC)中,在原点周围的2X2X2框(或2X2X1)中,无论哪个片段被栅格化并结束,都是可以映射到窗口坐标并将被写入帧缓冲区的片段(假设他们通过了深度测试)。你做什么来获取片段取决于你。

从你的问题我理解你正在谈论正交投影,在这种情况下检查你的正投影矩阵,它定义了"屏幕边缘的坐标"。因此,您的顶点的实际长度单位'坐标是投影和物理屏幕尺寸的函数。

我强烈建议阅读有关从顶点坐标到屏幕位置的转换的简单方法。例如。 http://www.songho.ca/opengl/gl_transform.html,略显过时,但很好地涵盖了这个想法。
另请查看http://www.songho.ca/opengl/gl_projectionmatrix.html,特别是有关正交投影的部分。它应该让您了解如何构建具有您选择的底部,左侧,右侧和顶部坐标的正投影矩阵。