Initial commit
This commit is contained in:
commit
3ca078c7e7
17 changed files with 1540 additions and 0 deletions
Lights
38
Lights/LightingManager.py
Normal file
38
Lights/LightingManager.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
from OpenGL.GL import *
|
||||
import numpy as np
|
||||
from OpenGL.GL.ARB.vertex_array_object import glDeleteVertexArrays
|
||||
from OpenGL.GL.framebufferobjects import glBindRenderbuffer
|
||||
from OpenGL.GLUT import *
|
||||
import OpenGL.GLUT.freeglut
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GL import *
|
||||
from ctypes import sizeof, c_float, c_void_p, c_uint
|
||||
from MatrixStuff.Transformations import *
|
||||
|
||||
class LightingManager:
|
||||
def __init__(self):
|
||||
self.Lights = []
|
||||
self.renderSteps = []
|
||||
|
||||
def addLight(self,l):
|
||||
self.Lights.append(l)
|
||||
|
||||
def removeLight(self,l):
|
||||
self.Lights.remove(l)
|
||||
|
||||
class __Renderstep:
|
||||
def __init__(self,program, vai):
|
||||
self.program = program
|
||||
self.vai = vai
|
||||
def __eq__(self, other):
|
||||
if type(other) is type(self):
|
||||
return self.program == other.program and self.vai == self.vai
|
||||
else:
|
||||
return False
|
||||
|
||||
def addRenderStep(self,program,vai):
|
||||
r = self.__Renderstep(program,vai)
|
||||
self.renderSteps.append(r)
|
||||
def removeRenderStep(self,program,vai):
|
||||
r = self.__Renderstep(program, vai)
|
||||
self.renderSteps.remove(r)
|
74
Lights/Lights.py
Normal file
74
Lights/Lights.py
Normal file
|
@ -0,0 +1,74 @@
|
|||
from OpenGL.GL import *
|
||||
import numpy as np
|
||||
from OpenGL.GL.ARB.vertex_array_object import glDeleteVertexArrays
|
||||
from OpenGL.GL.framebufferobjects import glBindRenderbuffer
|
||||
from OpenGL.GLUT import *
|
||||
import OpenGL.GLUT.freeglut
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GL import *
|
||||
from ctypes import sizeof, c_float, c_void_p, c_uint
|
||||
from MatrixStuff.Transformations import *
|
||||
|
||||
|
||||
class Light:
|
||||
programId = {}
|
||||
depthshaderId = -1
|
||||
|
||||
def getDepthProgram(self,vertexshader=-1,geometryshader=-1):
|
||||
if ((vertexshader,geometryshader) not in self.programId.keys() and vertexshader != -1 and geometryshader != -1):
|
||||
if self.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)
|
||||
self.programId[(vertexshader, geometryshader)] = program_id
|
||||
return program_id
|
||||
else:
|
||||
if (vertexshader,geometryshader) not in self.programId.keys():
|
||||
return -1
|
||||
return self.programId[(vertexshader,geometryshader)]
|
||||
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.ModelviewProjectionMatrix = np.identity(4)
|
||||
self.FramebufferId = -1
|
||||
self.DepthBuffer = -1
|
||||
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, 512, 512)
|
||||
if new:
|
||||
if self.DepthBuffer == -1:
|
||||
self.DepthBuffer = glGenTextures(1)
|
||||
glBindTexture(GL_TEXTURE_2D, self.DepthBuffer)
|
||||
glTexImage2D(GL_TEXTURE_2D, 0,GL_DEPTH_COMPONENT, 512, 512, 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)
|
||||
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)
|
0
Lights/Spotlight/Spotlight.py
Normal file
0
Lights/Spotlight/Spotlight.py
Normal file
15
Lights/depthfragment.glsl
Normal file
15
Lights/depthfragment.glsl
Normal file
|
@ -0,0 +1,15 @@
|
|||
#version 410
|
||||
|
||||
layout(location = 2) in vec3 pos;
|
||||
|
||||
uniform float near;
|
||||
uniform float far;
|
||||
|
||||
void main()
|
||||
{
|
||||
float z = gl_FragCoord.z;
|
||||
//convert to linear values
|
||||
//formula can be found at www.roxlu.com/2014/036/rendering-the-depth-buffer
|
||||
float c = (2.0 * near) / (far + near - z * (far - near));
|
||||
gl_FragDepth = c;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue