[Pygame | Pyopengl] Mit Objekten interagieren

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Zuzu_Typ

Liebe Leser,

ich würde gerne wissen, wie bzw. ob man mit Pygame und PyopenGL (und ggf. noch anderen Modulen) mit objekten im Pygame Fenster agieren kann.
Beispiel:

Code: Alles auswählen

import pygame, os
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

vertices = (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (1, -1, 1),
    (1, 1, 1),
    (-1, -1, 1),
    (-1, 1, 1)
    )

edges = (
    (0,1),
    (0,3),
    (0,4),
    (2,1),
    (2,3),
    (2,7),
    (6,3),
    (6,4),
    (6,7),
    (5,1),
    (5,4),
    (5,7),
    )

surfaces = (
    (0,1,2,3),
    (3,2,7,6),
    (6,7,5,4),
    (4,5,1,0),
    (1,5,7,2),
    (4,0,3,6)
    )

colors = (
    (1,0,0),
    (0,1,0),
    (0,0,1),
    (1,0,0),
    (1,1,1),
    (0,1,1),
    (1,0,0),
    (0,1,0),
    (0,0,1),
    (1,0,0),
    (1,1,1),
    (0,1,1)
    )

def Cube():
    glBegin(GL_QUADS)
    for surface in surfaces:
        x = 0
        for vertex in surface:
            x += 1
            glColor3fv(colors[x])
            glVertex3fv(vertices[vertex])
        
    glEnd()
    
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()

def main():
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display,DOUBLEBUF|OPENGL)

    gluPerspective(45, float(display[0])/float(display[1]), 0.1, 50.0)

    glTranslatef(0.0, 0.0, -5)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                os._exit(0)
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    glTranslatef(-0.1,0,0)
                if event.key == pygame.K_RIGHT:
                    glTranslatef(0.1,0,0)
                if event.key == pygame.K_UP:
                    glTranslatef(0,0.1,0)
                if event.key == pygame.K_DOWN:
                    glTranslatef(0,-0.1,0)
                    
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 4:
                    glTranslatef(0,0,-1)
                if event.button == 5:
                    glTranslatef(0,0,1)
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        Cube()
        pygame.display.flip()
        pygame.time.wait(10)

main()
Wenn man dieses Skript ausführt, soll man Beispielsweise auf den Würfel klicken, sodass dessen Farbe wird dann neu zufällig generiert wird.

Hat jemand eine Idee oder weiß wie's geht?

Vielen Dank für eure Hilfe!
Antworten