2011-02-27 38 views
1

我在学习OpenGL,很难找到明确的坐标系定义。OpenGL Vertex Value Range(GLFloat)

如何判断在视口中显示的数值范围值?

+0

唉,我采用Gl 3.0,所以一些矩阵东西不会帮助,直到我去设置它自己:)从我的理解呢。感谢您的快速回答。 – 2011-02-27 21:53:34

+1

然后,我给你的范围(-1到+1)适用于顶点着色器的输出(即它分配的'gl_Vertex'变量)。 – 2011-02-27 22:14:16

+0

@Ben:啊谢谢,突然间答案似乎很明显,因为着色器输出大声笑 – 2011-02-27 22:52:15

回答

4

-1.0 to +1.0(在应用了所有转换之后)。

这个信息被埋在glViewport documentation有点迂回的方式。我选择了MSDN版本的文档,因为更多其他在线源在转换为HTML期间会破坏公式(这是正确的公式,但无法识别)。

通过应用适当的缩放比例和平移因子,您可以获得所需的任何预转换坐标系。在GL 1.x - 2.x中可以很容易地使用这个功能。在OpenGL 3.x中,您使用顶点着色器来进行转换。

1

可见顶点值的范围由两个变换矩阵控制,ModelViewProjection模型视图矩阵构造有glRotateglTranslate类型的操作和投影矩阵glOrthoglPerspectivegluLookAt创建。

甲顶点V被转换成视区坐标与下面变换和不可见部分中的目标空间([-1,1]所有轴)被剔除。

V'' = Projection * ModelView * V 

然而glOrtho一个glPerspective得到能见度范围如在模型视图空间给定的输入。这些范围与变换的顶点媲美:

V' = ModelView * V 

如果您使用的是单位矩阵作为ModelView,你可以给glOrthoglPerspective那些比较你的顶点值。