我正在使用Haskell和OpenGL来构建3D地形。地形和灯光很好,但我在调整相机/视图时遇到了一些困难。
当我在display
函数中运行以下代码时:
matrixMode $= Projection
loadIdentity
-- perspective 45 1 0.1 100
matrixMode $= ModelView 0
loadIdentity
lookAt (Vertex3 0 0 0) (Vertex3 0 1 2) (Vector3 0 1 0)
我收到以下图片:
但是当我取消注释该行
perspective 45 1 0.1 100
我只是黑屏。
我的点数组非常大,但这是从ghci
复制的最后几点:
(1.0,0.0,0.76),(1.0,0.0,0.8),(1.0,0.0,0.84),(1.0,0.0,0.88),(1.0,0.0,0.92),(1.0,0.0,0.96) ,(1.0,0.0,1.0)
我觉得好像:
答案 0 :(得分:5)
默认投影/观看体积是正交(实际上是立方体),中心位于原点。在透视投影中,所有观察光线会聚到原点,该原点位于近平面的后面。由于您的原点位于您正在绘制的平面上,因此所有顶点将在屏幕上形成一条线并且不会产生任何碎片。正如KarolisJuodelė所说,调整lookAt
功能,使相机不在飞机上......