关于glPerspective和GL_POLYGON的困惑

问题描述 投票:1回答:1

我对glPerspective的工作方式感到困惑。我从理论上知道它的作用,但是在尝试使用它时我感到困惑。

这是我的代码(我使用Pygame创建窗口):

import pygame, sys
from OpenGL.GL import *
from OpenGL.GLU import *

pygame.init()
clock = pygame.time.Clock()
display = (800,600)
screen = pygame.display.set_mode(display,pygame.DOUBLEBUF|pygame.OPENGL)

# Perspective
gluPerspective(0, (display[0]/display[1]),0.1,50.0)

# Transformations
glScalef(0.5,0.5,0.5)
glTranslatef(0.0,0.0,0.0)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

    glBegin(GL_POLYGON)
    glVertex3f(-1.0,-1.0,0.0)
    glVertex3f(1.0,-1.0,0.0)
    glVertex3f(0.0,1.0,0.0)
    glEnd()

    pygame.display.flip()
    clock.tick(120)

我有两件事很困惑:

  1. 我只能在视场为0时看到多边形;它会以更高的值消失,甚至是0.001。它不应该变小吗?我对此通常感到困惑,FOV为0表示我们看不到任何东西吗?

  2. 我已将裁剪范围设置为0.1到50,所以在当前示例中,绘制的多边形不应消失,因为它太靠近了。我什至将所有尺寸的glTranslatef设置为0,以确保它低于较低的裁剪范围。但是它仍然显示。

非常感谢!

python opengl pygame pyopengl opengl-compat
1个回答
0
投票

数字0对于gluPerspective的视野不是有效参数。这是未定义的行为。最有可能根本没有设置(更改)投影矩阵。您看不到几何图形,因为它被gluPerspective的近平面裁剪了,所有在视锥的近,远平面中不存在的几何图形都被裁剪了。

设置具有有效角度的透视投影。例如:

Viewing frustum

[在近平面和远平面之间沿负Z轴移动几何:

gluPerspective(90, (display[0]/display[1]), 0.1, 50.0)

注意,在视图空间中,z轴指向视口之外,因此必须沿负z轴移动几何。

© www.soinside.com 2019 - 2024. All rights reserved.