Preciso desenvolver uma cena animada em Pytom, que tenha algum tipo de interação do usuário através da teclado
Segue o código da casa animada, peguei esse código em um site.
Alguem que conhece Pytom ou ja tenha uma cena montada poderia me ajudar ?
#!/usr/bin/env python
-- coding: iso8859-1 --
“”"###################################################
Portado para Python por Jonh Edson R. de Carvalho
###################################################"""
import sys
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
Variáveis que guardam a translação que será aplicada
sobre a casinha
global Tx, Ty
Tx = 0.0
Ty = 0.0
Variáveis que guardam os valores mínimos de x e y da
casinha
global minX,maxX,minY,maxY
minX = 0.0
maxX= 0.0
minY= 0.0
maxY= 0.0
Variáveis que guardam o tamanho do incremento nas
direções x e y (número de pixels para se mover a
cada intervalo de tempo)
global xStep, yStep
xStep= 0.0
yStep= 0.0
Variáveis que guardam a largura e altura da janela
global windowXmin,windowXmax,windowYmin,windowYmax
windowXmin= 0.0
windowXmax= 0.0
windowYmin= 0.0
windowYmax= 0.0
Função responsável por inicializar parâmetros e variáveis
def Inicializa():
# Define a cor de fundo da janela de visualização como branca
glClearColor(1.0, 1.0, 1.0, 1.0)
# Inicialização das variáveis globais
xStep = 1.0
yStep = 1.0
Tx = Ty = 0.0
minX = -15.0
maxX = 15.0
minY = -15.0
maxY = 17.0
windowXmin = windowYmin = -40.0
windowXmax = windowYmax = 40.0
def Desenha():
print("*** Callback de redesenho da tela")
Altera a cor do desenho para azul
glColor3f(0.0, 0.0, 1.0)
Limpa a janela de visualização com a cor de fundo definida
glClear(GL_COLOR_BUFFER_BIT)
Muda para o sistema de coordenadas do modelo
glMatrixMode(GL_MODELVIEW)
Inicializa a matriz de transformação corrente
glLoadIdentity()
Aplica uma translação sobre a casinha
glTranslatef(Tx, Ty, 0.0)
# Altera a cor do desenho para azul
glColor3f(0.0, 0.0, 1.0)
# Desenha a casa
glBegin(GL_QUADS)
glVertex2f(-15.0,-15.0)
glVertex2f(-15.0, 5.0)
glVertex2f( 15.0, 5.0)
glVertex2f( 15.0,-15.0)
glEnd()
# Altera a cor do desenho para branco
glColor3f(1.0, 1.0, 1.0)
#// Desenha a porta e a janela
glBegin(GL_QUADS)
glVertex2f(-4.0,-14.5)
glVertex2f(-4.0, 0.0)
glVertex2f( 4.0, 0.0)
glVertex2f( 4.0,-14.5)
glVertex2f( 7.0,-5.0)
glVertex2f( 7.0,-1.0)
glVertex2f(13.0,-1.0)
glVertex2f(13.0,-5.0)
glEnd()
# Altera a cor do desenho para azul
glColor3f(0.0, 0.0, 1.0)
# Desenha as "linhas" da janela
glBegin(GL_LINES)
glVertex2f( 7.0,-3.0)
glVertex2f(13.0,-3.0)
glVertex2f(10.0,-1.0)
glVertex2f(10.0,-5.0)
glEnd()
# Altera a cor do desenho para vermelho
glColor3f(1.0, 0.0, 0.0)
# Desenha o telhado
glBegin(GL_TRIANGLES)
glVertex2f(-15.0, 5.0)
glVertex2f( 0.0,17.0)
glVertex2f( 15.0, 5.0)
glEnd()
# Exibe o desenho na janela
glutSwapBuffers()
Função callback chamada para gerenciar eventos de teclas normais (ESC)
def Teclado (tecla, x, y):
print("*** Tratamento de teclas comuns")
print(">>> Tecla: %c",tecla)
if tecla==chr(27): # ESC ?
sys.exit(0)
if tecla == chr(ord('a')): # muda para tela cheia
glutFullScreen()
if tecla == chr(ord('b')): # muda posição da janela
glutReshapeWindow(500,400)
glutPositionWindow(0,0)
Função callback chamada para gerenciar eventos de teclas especiais
def TeclasEspeciais (tecla, x, y):
print("*** Tratamento de teclas especiais")
if tecla == GLUT_KEY_F1:
print(">>> Tecla F1 pressionada")
elif tecla == GLUT_KEY_F2:
print(">>> Tecla F2 pressionada")
if tecla == GLUT_KEY_F3:
print(">>> Tecla F3 pressionada")
Função callback chamada quando o tamanho da janela é alterado
def AlteraTamanhoJanela (w, h):
global windowXmin, windowXmax
global windowYmin, windowYmax
print("*** Callback de redimensionamento da tela")
print(">>> Novo tamanho da janela: ", w, h)
# Evita a divisao por zero
if h == 0:
h = 1
# Atualiza as variáveis
largura = w
altura = h
# Especifica as dimensões da Viewport
glViewport(0, 0, largura, altura)
# Inicializa o sistema de coordenadas
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
# Estabelece a janela de seleção (esquerda, direita, inferior,
# superior) mantendo a proporção com a janela de visualização
if largura <= altura:
gluOrtho2D (-40.0, 40.0, -40.0 * altura/largura, 40.0 * altura/largura)
windowXmin = -40.0
windowXmax = 40.0
windowYmin = -40.0*altura/largura
windowYmax = 40.0*altura/largura
else:
gluOrtho2D (-40.0 * largura/altura, 40.0 * largura/altura, -40.0, 40.0)
windowXmin = -40.0*largura/altura
windowXmax = 40.0*largura/altura
windowYmin = -40.0
windowYmax = 40.0
def Anima(value):
global minX, maxX, minY, maxY
global xStep,yStep
global windowXmin, windowXmax
global windowYmin, windowYmax
#Muda a direção quando chega na borda esquerda ou direita
if( (Tx+maxX) > windowXmax or (Tx+minX) < windowXmin ):
xStep = -xStep
# Muda a direção quando chega na borda superior ou inferior
if( (Ty+maxY) > windowYmax or (Ty+minY) < windowYmin ):
yStep = -yStep
# Move a casinha
Tx += xStep;
Ty += yStep;
# Redesenha a casinha em outra posição
glutPostRedisplay();
glutTimerFunc(50,Anima, 1);
Função callback para eventos de botões do mouse
def GerenciaMouse (button, state, x, y):
print("*** Tratamento de Cliques de mouse")
if state == GLUT_DOWN:
print(">>> Botao pressionado ",button)
if state == GLUT_UP:
print(">>> Botao liberado ", button)
Programa principal
if (name == ‘main’):
# Inicializa a Biblioteca GLUT
glutInit(sys.argv)
# Define o modo de operação da GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
# Especifica a posição inicial da janela GLUT
glutInitWindowPosition(5,5)
# Especifica o tamanho inicial em pixels da janela GLUT
glutInitWindowSize(450,450)
# Cria a janela passando como argumento o título da mesma
glutCreateWindow("Desenha tela padrão do GLUT")
# Registra a função callback de redesenho da janela de visualização
glutDisplayFunc(Desenha)
# Registra a função callback de redimensionamento da janela de visualização
glutReshapeFunc(AlteraTamanhoJanela)
# Registra a função callback para eventos de botões do mouse
glutMouseFunc(GerenciaMouse)
# Registra a função callback para tratamento das teclas normais
glutKeyboardFunc (Teclado)
# Registra a função callback para tratamento das teclas especiais
glutSpecialFunc (TeclasEspeciais)
# Chama a função responsável por fazer as inicializações
Inicializa()
# Inicia o processamento e aguarda interações do usuário
glutMainLoop()