Opengl 为什么调用透视函数会给我留下一个黑屏?

Opengl 为什么调用透视函数会给我留下一个黑屏?,opengl,haskell,Opengl,Haskell,我正在使用Haskell和OpenGL构建一个3D地形。地形和照明都很好,但我在调整相机/视图时遇到了一些困难 在我的显示功能中运行以下代码时: 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) 我收到以下图像: 但是当我取

我正在使用Haskell和OpenGL构建一个3D地形。地形和照明都很好,但我在调整相机/视图时遇到了一些困难

在我的
显示
功能中运行以下代码时:

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)

我觉得好像:

  • 是否错误地指定了透视平面?或者
  • 我不应该重复调用其中一个或多个函数

  • 默认投影/查看体积是正交的(实际上是立方体),中心位于原点。在透视投影中,所有可见光线会聚到近平面后面的原点。由于原点位于绘制的平面上,因此所有顶点将在屏幕上形成一条线,不会产生任何碎片。正如KarolisJuodelė所说,调整
    lookAt
    功能,使相机不在平面上


    是否返回任何错误?@user1118321我不确定是否可以通过Haskell的绑定访问该函数。您通常看到的图像中有什么?看起来像是一个正方形,可能是被近平面夹住的?另外,您的所有顶点是否都位于
    (x,0,y)
    0
    ?我想这是你的问题。尝试
    10
    获取第一个向量(注意,如果不调用透视图或设置远平面,您将看不到任何内容)。@KarolisJuodelė谢谢您的回答。谢谢-我不知道为什么,但在我看来,我交换了第一个和第二个顶点的参数位置。。。现在说得通了。这是我今天看到的最史诗般的回答!