2016-03-23 4 views
0

OpenGL выглядит как хорошая библиотека с хорошим сообществом. После нескольких уроков и чтения некоторых объяснений у меня возникло ощущение, что я получил основы.openGL: Поверните всю сцену или «поверните» камеру

Тем не менее, я борюсь с камерой. Я получаю, что с OpenGL камера статична, и для создания иллюзии, что камера движется, вам нужно переместить всю сцену. Я попытался превратить всю сцену. Объекты поворачиваются, но передний объект остается спереди. Я читал еще немного, но мне кажется, что я делаю то, что они говорят мне.

Вот пример работы двух квадратов, которые мне нравятся «с орбитой» с камерой.

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) 

Теперь оба квадрата поворачиваются, но зеленые квадраты остаются перед красным квадратом. Я хотел бы видеть, что вся сцена превращается, так что зеленый квадрат движется за красным квадратом. Может ли кто-нибудь указать мне в правильном направлении?

ответ

1

Необходимо включить GL_DEPTH_TEST с glEnable(GL_DEPTH_TEST);.

Кроме того, использование старого конвейера с фиксированной функцией устарело (с точки зрения OpenGL 3.0) и было удалено в OpenGL 3.1. Я настоятельно рекомендую вам не начинать новый проект с помощью этого старого стационарного конвейера.

+0

Что вы подразумеваете под «старым контуром с фиксированной функцией»? – Stoeptegel

+0

Старый конвейер функций - это старый способ визуализации объектов с помощью OpenGL (с 'glVertex3f',' glNormal3f', 'glBegin' и т. Д. ...). – Nasso

+1

Чтобы добавить к этому, если вы хотите узнать о том, как использовать OpenGL, вы можете найти документацию онлайн из смеси конвейера FF и программируемого конвейера. Чтобы узнать, как выглядит OpenGL с помощью 3.1+, попробуйте выполнить [эти учебники и этот сайт] (http://learnopengl.com/) – WearyWanderer

Смежные вопросы