Gra_3d/main.py
2017-08-10 17:53:55 +02:00

94 lines
2.5 KiB
Python

import pygame
from pygame.locals import *
import glfw
import math
import time
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.arrays import vbo
import numpy as np
from ctypes import *
from camera import *
from obj_loader import *
from shaders import *
def main():
pygame.init()
display = (800,600)
pygame.display.set_mode(display, OPENGL|DOUBLEBUF)
i=0
running=True
cam=Camera(0,0,0)
vsh=open("shader.vsh")
fsh=open("shader.fsh")
shader=Shader(vsh,fsh)
rel=np.array([0,0])
dpi=200.0
rel2=np.array([0,0])
pygame.mouse.set_visible(False)
pygame.event.set_grab(True)
glMatrixMode(GL_PROJECTION)
gluPerspective(60,800.0/600.0,0.1,1000.0)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glEnable(GL_COLOR_MATERIAL)
glEnableClientState(GL_VERTEX_ARRAY)
glEnableClientState(GL_NORMAL_ARRAY)
glLightfv(GL_LIGHT0,GL_DIFFUSE,(1.0,1.0,1.0,1.0))
glLightfv(GL_LIGHT0,GL_AMBIENT,(0.2,0.2,0.2,1.0))
obj=Object("cube.obj",(0.0,0.0,-2.0),True )
while running:
ticks=pygame.time.get_ticks()
pressed=pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running=False
glClearColor(0.0,0.0,0.0,1.0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glPushMatrix()
shader.use()
cam.rotate(rel[0]/dpi,rel[1]/dpi)
cam.look()
obj.draw()
glLightfv(GL_LIGHT0,GL_POSITION,cam.getPos())
glPopMatrix()
pygame.display.flip()
rel=np.array(pygame.mouse.get_rel())
pygame.mouse.set_pos(display[0]/2, display[1]/2)
rel2=np.array(pygame.mouse.get_rel())
ticks=pygame.time.get_ticks()-ticks
if ticks>0:
fps=math.floor(1000000.0/(ticks*1000.0))
else:
fps=1000000.0
print(fps)
dt=ticks/1000.0
mx,my=math.sin(cam.roll),math.cos(cam.roll)
if pressed[pygame.K_d]:
cam.move(-mx*dt,0,my*dt)
if pressed[pygame.K_a]:
cam.move(mx*dt,0,-my*dt)
if pressed[pygame.K_w]:
cam.move(my*dt,0,mx*dt)
if pressed[pygame.K_s]:
cam.move(-my*dt,0,-mx*dt)
if pressed[pygame.K_SPACE]:
cam.move(0,dt,0)
if pressed[pygame.K_LCTRL]:
cam.move(0,-dt,0)
if pressed[pygame.K_ESCAPE]:
running=False
pygame.quit()
quit()
main()