作成したモデルを表示する角度を変更したい。私は周りを見回して、gluLookAt() 関数について知りました。これは、私がやりたくないことをしていると思います。ただし、gluLookAt() の使い方がまったくわかりません。以下のコードにポップしましたが、正しく機能しないようです。とにかく、私のコード(python):
#!/usr/bin/env python
from OpenGL.GL import *
from OpenGL.GLU import *
import pygame
def pyramid():
#draw a pyramid here
def cube():
#draw a cube here
class mainClass():
def mainMethod(self):
from sys import exit
print ("Initalizing...")
resolution = (400, 300)
pygame.init()
screen = pygame.display.set_mode(resolution, pygame.OPENGL|pygame.DOUBLEBUF)
self.xPer, self.yPer, self.zPer = 0, 0, 0
print ("Doing GL stuff...")
glViewport(self.xPer, self.yPer, resolution[0], resolution[1])
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45.0, float(resolution[0]) / resolution[1], 0.1, 1000.0)#Distance,
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
print ("More GL stuff...")
glEnable(GL_DEPTH_TEST)
#glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glShadeModel(GL_SMOOTH)
glClearColor(0.0, 0.0, 0.0, 0.0)
print ("Minor details...")
clock = pygame.time.Clock()
rot_tri = 0
rot_quad = 0
print ("Mainloop...")
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
exit()
elif event.key == pygame.K_a:
self.xPer += 50
elif event.key == pygame.K_d:
self.xPer -= 50
#glViewport(self.xPer, self.yPer, resolution[0], resolution[1])
elif event.key == pygame.K_w:
self.yPer -= 50
#glViewport(self.xPer, self.yPer, resolution[0], resolution[1])
elif event.key == pygame.K_s:
self.yPer += 50
#glViewport(self.xPer, self.yPer, resolution[0], resolution[1])
elif event.key == pygame.K_f:
self.zPer += 50
elif event.key == pygame.K_v:
self.zPer -= 50
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity()
gluLookAt(10, 10, 10, self.xPer, self.yPer, self.zPer, 0, 1, -1);
glLoadIdentity()
glTranslatef(-1.5, 0.0, -6.0)
glRotatef(rot_tri, 0.0, 1.0, 0.0)
pyramid()
glLoadIdentity()
glTranslate(1.5, 0.0, -6.0)
glRotatef(rot_quad, 1.0, 0.0, 0.0)
cube()
rot_tri += 2.0
rot_quad -= 1.5
pygame.display.set_caption("hello_opengl.py FPS: %i" % clock.get_fps())
pygame.display.flip()
clock.tick()
t = mainClass()
t.mainMethod()
このコードで実行したいのは、回転するピラミッドと立方体を表示する角度を変更することだけです。gluLookAt() を使用するようにこのコードを変更する方法を説明できる人はいますか?
PS: OpenGL (行列、3D 数学、glLoadIdentity() が行うことなど) を説明する素敵なページはありますか? コードを書くことはできますが、何をしているのかわかりません。