2017-09-02 99 views
0

我在学习OpenGL,并且对设置顶点数据位置感到困惑。如何在OpenGL中设置对象的单位

例如, 我想绘制一个矩形大小300毫米毫米x 300毫米,据我所知,我可以假设1级的OpenGL单元= 1毫米,然后我设置这样的顶点数据:

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的单位或300毫米。

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

请问您是否可以向我指出正确的方向。

谢谢

回答

1

OpenGL坐标没有“单位”。

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

从你的问题我知道你在谈论正射投影,在这种情况下检查你的正交投影矩阵,它定义了“屏幕边缘”的坐标。因此,顶点坐标的实际长度单位是投影和物理屏幕大小的函数。

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

相关问题