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 中删除。我强烈建议你不要用这个旧的固定管道开始一个新项目。
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 中删除。我强烈建议你不要用这个旧的固定管道开始一个新项目。