openGL:转动整个场景或"orbiting"相机

openGL: Turn the whole scene or "orbiting" the camera

OpenGL 似乎是一个不错的库,拥有良好的社区。在学习了一些教程并阅读了一些解释之后,我觉得我掌握了基础知识。

仍然,我在相机上挣扎。我知道使用 OpenGL 时,相机是静态的,要创建相机移动的错觉,您必须移动整个场景。我试图扭转整个局面。物体转动,但前面的物体留在前面。我又看了一些,但感觉我在做他们告诉我的事情。

这是一个 运行 我喜欢用相机 "orbit" 的两个正方形的例子。

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *


def draw():
    glBegin(GL_QUADS)
    glColor3fv((1,0,0))
    glVertex3fv((1,-1,-1))
    glVertex3fv((1,1,-1))
    glVertex3fv((-1,1,-1))
    glVertex3fv((-1,-1,-1))

    glColor3fv((0,1,0))
    glVertex3fv((1,-1,-2))
    glVertex3fv((1,1,-2))
    glVertex3fv((-1,1,-2))
    glVertex3fv((-1,-1,-2))

    glEnd()

pygame.init()
display = (800,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

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

glTranslatef(0.0,0.0, -25.0)

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

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glRotatef(1, 0.0, 1.0, 0.0)

        draw()
        pygame.display.flip()
        pygame.time.wait(10)

现在两个方块都转了,但是绿色方块留在红色方块前面。我想看到的是整个场景转动,绿色方块移动到红色方块后面。有人能指出我正确的方向吗?

您必须使用 glEnable(GL_DEPTH_TEST); 启用 GL_DEPTH_TEST

此外,不推荐使用旧的固定函数管道(从 OpenGL 3.0 开始),并且已在 OpenGL 3.1 中删除。我强烈建议你不要用这个旧的固定管道开始一个新项目。