-
Notifications
You must be signed in to change notification settings - Fork 0
/
gameobject.py
72 lines (56 loc) · 2.39 KB
/
gameobject.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
File that contains a game object, which is the general representation of an
object.
"""
from OpenGL.GL import *
from pyrr import Matrix44 as mat4
from texture import activateTexture, loadTexture
class GameObject:
def __init__(self, name=None, position=None, texImg=None, specTexImg=None,
normalMap=None, shininess=None, ka=None, kd=None, ks=None,
program=None):
self.model = mat4.identity(dtype='f')
self.name = name
self.position = position
self.texImg = texImg
self.specTexImg = specTexImg
self.normalMap = normalMap
self.shininess = shininess
self.ka = ka
self.kd = kd
self.ks = ks
self.program = program
self.initTextures()
def initTextures(self):
self.texture = loadTexture(self.texImg, self.program) if self.texImg else None
self.specTex = loadTexture(self.specTexImg, self.program) if self.specTexImg else None
self.normalTex = loadTexture(self.normalMap, self.program) if self.normalMap else None
def _bindTextures(self):
if self.texture:
activateTexture(self.texture, GL_TEXTURE0, self.program, "tex", 0)
if self.normalTex:
activateTexture(self.normalTex, GL_TEXTURE1, self.program,
"normalTex", 1)
def _sendLightningParameters(self):
glUniform1f(self.program.glUniforms["ka"], self.ka)
glUniform1f(self.program.glUniforms["kd"], self.kd)
glUniform1f(self.program.glUniforms["ks"], self.ks)
glUniform1f(self.program.glUniforms["shininess"], self.shininess)
def drawCall(self):
glDrawElements(GL_TRIANGLES, self.indexLen, GL_UNSIGNED_INT, None)
def draw(self, eye, viewMatrix, projMatrix):
glUseProgram(self.program.pointer)
glBindVertexArray(self.vao)
eyePos = self.program.glUniforms["eye"]
glUniform3fv(eyePos, 1, GL_FALSE, eye)
modelMatrix = self.getModelMatrix()
mvpMatrix = modelMatrix * viewMatrix * projMatrix
glUniformMatrix4fv(self.program.glUniforms["mMatrix"], 1,
GL_FALSE, modelMatrix)
glUniformMatrix4fv(self.program.glUniforms["mvpMatrix"], 1,
GL_FALSE, mvpMatrix)
self._bindTextures()
self._sendLightningParameters()
self.drawCall()
glBindVertexArray(0)
glUseProgram(0)