thermodynamic v1
This commit is contained in:
parent
5168061d1b
commit
41761b7b56
16 changed files with 1025 additions and 212 deletions
Lights/Spotlight
|
@ -3,4 +3,95 @@ from OpenGL.GL import *
|
|||
from MatrixStuff.Transformations import *
|
||||
|
||||
class Spotlight(Light):
|
||||
pass
|
||||
programId = {}
|
||||
depthshaderId = -1
|
||||
|
||||
@classmethod
|
||||
def getDepthProgram(cls, vertexshader=-1, geometryshader=-1):
|
||||
if ((
|
||||
vertexshader, geometryshader) not in cls.programId.keys() and vertexshader != -1 and geometryshader != -1):
|
||||
fragment_shader_id = -1
|
||||
if cls.depthshaderId == -1:
|
||||
with open('./Lights/depthfragment.glsl', 'r') as f:
|
||||
fragment_shader_string = f.read()
|
||||
fragment_shader_id = glCreateShader(GL_FRAGMENT_SHADER)
|
||||
glShaderSource(fragment_shader_id, fragment_shader_string)
|
||||
glCompileShader(fragment_shader_id)
|
||||
if glGetShaderiv(fragment_shader_id, GL_COMPILE_STATUS) != GL_TRUE:
|
||||
raise RuntimeError(glGetShaderInfoLog(fragment_shader_id))
|
||||
|
||||
program_id = glCreateProgram()
|
||||
glAttachShader(program_id, vertexshader)
|
||||
glAttachShader(program_id, geometryshader)
|
||||
glAttachShader(program_id, fragment_shader_id)
|
||||
glLinkProgram(program_id)
|
||||
cls.programId[(vertexshader, geometryshader)] = program_id
|
||||
return program_id
|
||||
else:
|
||||
if (vertexshader, geometryshader) not in cls.programId.keys():
|
||||
return -1
|
||||
return cls.programId[(vertexshader, geometryshader)]
|
||||
|
||||
def __init__(self, target=[0, 0, 0], opening=45):
|
||||
super(Spotlight, self).__init__()
|
||||
self.target = target
|
||||
self.opening = opening
|
||||
|
||||
@property
|
||||
def lightColor(self):
|
||||
return self._lightColor
|
||||
|
||||
@lightColor.setter
|
||||
def lightColor(self, value):
|
||||
self._lightColor = value
|
||||
|
||||
@property
|
||||
def ModelviewProjectionMatrix(self):
|
||||
return self._ModelviewProjectionMatrix
|
||||
|
||||
@ModelviewProjectionMatrix.setter
|
||||
def ModelviewProjectionMatrix(self, value):
|
||||
self._ModelviewProjectionMatrix = np.matrix(value)
|
||||
|
||||
@property
|
||||
def pos(self):
|
||||
return self._pos
|
||||
|
||||
@pos.setter
|
||||
def pos(self, value):
|
||||
self._pos = value
|
||||
|
||||
def prepareForDepthMapping(self):
|
||||
new = False
|
||||
if self.FramebufferId == -1:
|
||||
self.FramebufferId = glGenFramebuffers(1)
|
||||
new = True
|
||||
glClearColor(1.0, 1.0, 1.0, 1.0)
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, self.FramebufferId)
|
||||
glCullFace(GL_FRONT)
|
||||
glViewport(0, 0, self.map_size, self.map_size)
|
||||
if new:
|
||||
if self.DepthBuffer == -1:
|
||||
self.DepthBuffer = glGenTextures(1)
|
||||
glBindTexture(GL_TEXTURE_2D, self.DepthBuffer)
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, self.map_size, self.map_size, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER)
|
||||
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, np.array([0, 0, 0], dtype=np.float32))
|
||||
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, self.FramebufferId, 0)
|
||||
|
||||
DrawBuffers = [GL_NONE]
|
||||
glDrawBuffers(DrawBuffers)
|
||||
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE):
|
||||
return False
|
||||
|
||||
def finishDepthMapping(self):
|
||||
glCullFace(GL_BACK)
|
||||
DrawBuffers = [GL_COLOR_ATTACHMENT0]
|
||||
glDrawBuffers(DrawBuffers)
|
||||
glClearColor(0.0, 0.0, 0.0, 1.0)
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0)
|
Loading…
Add table
Add a link
Reference in a new issue