2017-03-07 89 views
0

我刚开始学习opengl,所以我可能不知道所有的东西。在VB.net中使用OpenTK。OpenGL:如何设置顶点z坐标为正数量?

我有这样的代码:

Dim pm As Matrix4 = Matrix4.CreatePerspectiveFieldOfView(1.57, 16/9, 0.1, 100) 
    GL.MatrixMode(MatrixMode.Projection) 
    GL.LoadMatrix(pm) 
    GL.Begin(PrimitiveType.Triangles) 
    GL.Vertex3(0, 0, -1) : GL.Color4(1.0!, 0!, 0!, 1.0!) 
    GL.Vertex3(1, 0, -1) : GL.Color4(0.0!, 1.0!, 0!, 1.0!) 
    GL.Vertex3(0, 1, -1) : GL.Color4(0.0!, 0.0!, 1.0!, 1.0!) 
    GL.End() 

这正确绘制三角形。

但是当我改变z坐标到+ ve时,它们消失了。就像GL.Vertex3(0, 0, +1)时那个顶点消失一样。当所有3个顶点的z坐标都是+ ve时,什么都看不见。 我认为这是因为一些矩阵的东西,所以我增加了一个翻译上面定义的“PM”矩阵:

 Matrix4.CreateTranslation(0, 0, +1.0!, pm) 

仍然没有任何反应。

但是,当所有人都-ve那么一切都很好:

GL.Vertex3(0, 0, -10) : GL.Color4(1.0!, 0!, 0!, 1.0!) 
GL.Vertex3(1, 0, -10) : GL.Color4(0.0!, 1.0!, 0!, 1.0!) 
GL.Vertex3(0, 1, -10) : GL.Color4(0.0!, 0.0!, 1.0!, 1.0!) 

注:我已经按照this指南。他的代码似乎有同样的问题,虽然没有人解决它。 His code

有人可以向我解释这个东西吗?提前致谢。

回答

0

在OpenGL中,通常假定摄像头正在朝-z方向看(这是一个约定,而不是限制)。由于这个原因,投影矩阵通常以这样的方式构造,即它们将[-nearPlane,-farPlane]与可见深度区域之间的间隔映射。

如果你想看正z,那么你必须添加一个额外的观察矩阵,使摄像机围绕y轴旋转180°(或者是一个简单地反映z轴的曲线,但是然后绕线顺序发生变化)。