- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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)
有两件事我很困惑:
我只能在视野为 0 时看到多边形;它消失在任何更高的值,甚至像 0.001。不应该变小吗?我通常对此感到困惑,fov 为 0 不是意味着我们看不到任何东西吗?
我已将裁剪范围设置为 0.1 到 50,因此在当前示例中,绘制的多边形不应消失,因为它太近了。我什至将所有维度的 glTranslatef 设置为 0,以确保它低于下裁剪范围。但它仍然显示。
非常感谢!
最佳答案
数字 0 不是 gluPerspective
视野的有效参数.这是未定义的行为。很可能根本没有设置(更改)投影矩阵。
您看不到几何图形,因为它被 Viewing frustum 的近平面裁剪了所有不在平截头体的近平面和远平面中的几何体都被剪裁掉。
设置一个有效角度的透视投影。例如:
gluPerspective(90, (display[0]/display[1]), 0.1, 50.0)
在近平面和远平面之间沿负 z 轴移动几何体:
glBegin(GL_POLYGON)
glVertex3f(-1.0, -1.0, -5.0)
glVertex3f(1.0, -1.0, -5.0)
glVertex3f(0.0, 1.0, -5.0)
glEnd()
请注意,在 View 空间中,z 轴指向视口(viewport)之外,因此您必须沿负 z 轴移动几何体。
关于python - 对 glPerspective 和 GL_POLYGON 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009985/
我对 glPerspective 的工作原理感到困惑。我在理论上知道它的作用,但在尝试使用它时我对它感到困惑。 这是我的代码(我使用 Pygame 来创建窗口): import pygame, sys
我不知道如何设置距离 我应该站在哪里查看我的 2d 东西(中心有一个球 pos:1024/2,768/2) 我使用 gluLookAt 和 glPerspective 为我的 2d 旋转对象提供更多
我是一名优秀的程序员,十分优秀!