2011-10-07 5 views
2

저는 파이썬에서 로고 시각화를 만들려고합니다. 3D 공간에서 이미지가 항상 화면의 중심을 향하고 이미지는 고정 된 경로를 따라 이동합니다. 나는 전에 이것을 Vizard을 사용하는 파이썬으로했지만, "자유롭게"이것을 수행하고 크로스 플랫폼 매너를하고 싶습니다.3D 공간에서 이미지 이동

pyglet을 사용하여 이미지화 된 매핑 된 쿼드에 대한 핸들을 얻는 가장 빠른 (코드를 읽은 가장 짧은 양) 점은 내가 해당 쿼드의 위치와 방향을 조작 할 수 있습니까?

답변

6

다음은 그 위치에 이미지를 배치하는 저를 허용와 내가 올 수있는 간단한 코드 (0, 0, -10) : 내가 찾은

#!/usr/bin/env python               
import pyglet 
from pyglet.gl import * 

window = pyglet.window.Window() 
glEnable(GL_DEPTH_TEST) 

image = pyglet.image.load('imgs/appfolio.png') 
texture = image.get_texture() 
glEnable(texture.target) 
glBindTexture(texture.target, texture.id) 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width, image.height, 
      0, GL_RGBA, GL_UNSIGNED_BYTE, 
      image.get_image_data().get_data('RGBA', image.width * 4)) 

rect_w = float(image.width)/image.height 
rect_h = 1 

@window.event 
def on_draw(): 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    glLoadIdentity() 
    glTranslatef(0, 0, -10) 
    glBindTexture(texture.target, texture.id) 
    glBegin(GL_QUADS) 
    glTexCoord2f(0.0, 0.0); glVertex3f(-rect_w, -rect_h, 0.0) 
    glTexCoord2f(1.0, 0.0); glVertex3f(rect_w, -rect_h, 0.0) 
    glTexCoord2f(1.0, 1.0); glVertex3f(rect_w, rect_h, 0.0) 
    glTexCoord2f(0.0, 1.0); glVertex3f(-rect_w, rect_h, 0.0) 
    glEnd() 

def on_resize(width, height): 
    glViewport(0, 0, width, height) 
    glMatrixMode(GL_PROJECTION) 
    glLoadIdentity() 
    gluPerspective(65.0, width/float(height), 0.1, 1000.0) 
    glMatrixMode(GL_MODELVIEW) 

window.on_resize = on_resize # we need to replace so can't use @window.event  
pyglet.app.run() 

가장 어려운 부분은 on_resize이었다 함수는 디폴트의 직교 투영이 작동하지 않기 때문에 예상대로 작동하도록 교체되어야했습니다.

NeHe tutorial on texture mappingJess Hill's pyglet conversion이 가장 유용합니다.

전체 로고 시각화 코드는 방금 전에 작성한 블로그 항목 "Moving Images in 3D Space with Pyglet"에서 찾을 수 있습니다.

관련 문제