94 lines
2.5 KiB
Python
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()
|