透视图的拐角处有消失点。Opengl

透视图的拐角处有消失点。Opengl,opengl,pyglet,perspectivecamera,vanishing-point,Opengl,Pyglet,Perspectivecamera,Vanishing Point,我正在使用pyglet:与opengl一起工作。然而,我有一些问题 我的消失点出现在屏幕的左下角(0,0)。下图应说明这一点: 左边是我现在看到的立方体。右边是它应该(我希望它)的样子。我怎样才能做到这一点 另外,我读了一些关于矩阵模式的书,似乎GL_投影应该和透视图一起使用。但是,当我同时使用它们时,透视效果消失了。只有在GL_MODELVIEW中,透视才能工作。我不明白为什么会这样 下面是我用来显示对象的代码 glMatrixMode(GL_MODELVIEW) glLoadIdentity

我正在使用pyglet:与opengl一起工作。然而,我有一些问题

我的消失点出现在屏幕的左下角(0,0)。下图应说明这一点:

左边是我现在看到的立方体。右边是它应该(我希望它)的样子。我怎样才能做到这一点

另外,我读了一些关于矩阵模式的书,似乎GL_投影应该和透视图一起使用。但是,当我同时使用它们时,透视效果消失了。只有在GL_MODELVIEW中,透视才能工作。我不明白为什么会这样

下面是我用来显示对象的代码

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluPerspective(60,1,0,10)
zNear
必须大于零且小于
zFar
。尝试类似于
0.1
的方法

请尝试以下顺序:

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60,1,0.1,10)

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

# draw stuff
zNear
必须大于零且小于
zFar
。尝试类似于
0.1
的方法

请尝试以下顺序:

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60,1,0.1,10)

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

# draw stuff
原点(0,0)位于屏幕的左下角。这使得2D和3D之间具有奇偶性;pyglet的二维坐标从左下角开始

要解决这个问题,只需在投影矩阵之前添加一个平移:

window = pyglet.window.Window()
glLoadIdentity()
pyglet.graphics.glTranslatef(window.width / 2.0, window.height / 2.0, 0.0)
gluPerspective(60,1,0,10)
这会将原点移动到屏幕的中心(或移动“摄像头”查看原点;它们实际上是相同的)

原点(0,0)位于屏幕的左下角。这使得2D和3D之间具有奇偶性;pyglet的二维坐标从左下角开始

要解决这个问题,只需在投影矩阵之前添加一个平移:

window = pyglet.window.Window()
glLoadIdentity()
pyglet.graphics.glTranslatef(window.width / 2.0, window.height / 2.0, 0.0)
gluPerspective(60,1,0,10)

这会将原点移动到屏幕中心(或移动“摄像头”查看原点;它们实际上是相同的)

我更改了它。这两个问题都没有解决,但谢谢你,我改变了它。这两个问题都没有解决,但谢谢你,不管怎样,这就像你在翻译矩阵上乘以透视矩阵一样。确保仅(且仅)将透视应用于GL_投影矩阵,并在这之前将其初始化为identity。看起来您将透视矩阵乘以平移矩阵。确保仅(且仅)将gluPerspective应用于GL_投影矩阵,并在此之前将其初始化为identity。