【问题标题】:gluPerspective has vanishing point in corner. OpenglgluPerspective 在角落有消失点。开放式
【发布时间】:2023-03-19 07:47:02
【问题描述】:

我正在使用 pyglet:http://www.pyglet.org/ 来处理 opengl。但是,我有一些问题。

我的消失点出现在屏幕的一角(0,0)左下角。下图应显示说明这一点:http://i.imgdiode.com/0wu5E0.png

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

另外,我读了一些关于矩阵模式的文章,似乎 GL_PROJECTION 应该与 gluPerspective 一起使用。但是,当我将它们一起使用时,透视效果就消失了。只有在 GL_MODELVIEW 中 gluPerspective 才能工作。我很困惑为什么会这样。

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

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluPerspective(60,1,0,10)

【问题讨论】:

  • 看起来您是在平移矩阵之上乘以透视矩阵。确保您仅(且仅)将 gluPerspective 应用于 GL_PROJECTION 矩阵,并且在此之前将其初始化为身份。

标签: opengl pyglet perspectivecamera vanishing-point


【解决方案1】:
gluPerspective(60,1,0,10)
                    ^ stop that

zNear 必须大于零且小于zFar。试试0.1。

试试这个顺序:

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

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

# draw stuff

【讨论】:

  • 我改了。两个问题都没有消失,但还是谢谢你
【解决方案2】:

原点 (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)

这会将原点移动到屏幕中心(或移动“相机”以查看原点;这些实际上是相同的)

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多