Initial commit
This commit is contained in:
commit
3ca078c7e7
17 changed files with 1540 additions and 0 deletions
22
Objects/Cube/Cube.py
Normal file
22
Objects/Cube/Cube.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
from OpenGL.GLUT import *
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GL import *
|
||||
from Objects.Objects import *
|
||||
import numpy as np
|
||||
|
||||
class Cube(Object):
|
||||
GeometryShaderId = -1
|
||||
def __init__(self):
|
||||
Object.__init__(self)
|
||||
if(Cube.GeometryShaderId == -1):
|
||||
self.initializeShader()
|
||||
def initializeShader(self)->bool:
|
||||
with open('./Objects/Cube/cube_geometry.glsl', 'r') as f:
|
||||
geometry_shader_string = f.read()
|
||||
Cube.GeometryShaderId = glCreateShader(GL_GEOMETRY_SHADER)
|
||||
glShaderSource(Cube.GeometryShaderId, geometry_shader_string)
|
||||
glCompileShader(Cube.GeometryShaderId)
|
||||
if glGetShaderiv(Cube.GeometryShaderId, GL_COMPILE_STATUS) != GL_TRUE:
|
||||
raise RuntimeError(glGetShaderInfoLog(Cube.GeometryShaderId))
|
||||
return False
|
||||
return True
|
363
Objects/Cube/cube_geometry.glsl
Normal file
363
Objects/Cube/cube_geometry.glsl
Normal file
|
@ -0,0 +1,363 @@
|
|||
#version 410
|
||||
|
||||
layout(points) in;
|
||||
layout(triangle_strip,max_vertices=24) out;
|
||||
|
||||
uniform mat4 projModelViewMatrix;
|
||||
uniform mat3 normalMatrix;
|
||||
uniform mat3 rotMatrix;
|
||||
|
||||
uniform mat4 lightProjModelViewMatrix[7];
|
||||
uniform int numLights;
|
||||
uniform float width;
|
||||
uniform float height;
|
||||
uniform float near;
|
||||
uniform float far;
|
||||
|
||||
layout(location = 0) in vec3 colorgeo[1];
|
||||
layout(location = 0) out vec3 colorout;
|
||||
layout(location = 1) out vec3 normal;
|
||||
layout(location = 2) out vec3 pos;
|
||||
layout(location = 3) out vec4 lightviewpos[3];
|
||||
|
||||
/*
|
||||
lightpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightpos[i] = lightpos[i] / lightpos[i].w;
|
||||
lightpos[i].z = (2.0 * near) / (far + near - lightpos[i].z * (far - near));
|
||||
lightpos[i] = vec4(lightpos[i].x/2.0 + 0.5,lightpos[i].y/2.0 + 0.5,lightpos[i].z,lightpos[i].w);
|
||||
*/
|
||||
|
||||
void main(){
|
||||
//hinten
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//vorne
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//oben
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//unten
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//inks
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(-0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//rechts*
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,-0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = (gl_in[0].gl_Position + vec4(rotMatrix * vec3(0.5,0.5,-0.5),0));
|
||||
for(int i = 0;i < numLights; i++){
|
||||
lightviewpos[i] = lightProjModelViewMatrix[i] * gl_Position;
|
||||
lightviewpos[i] = lightviewpos[i] / lightviewpos[i].w;
|
||||
lightviewpos[i] = vec4(lightviewpos[i].x/2.0 + 0.5,lightviewpos[i].y/2.0 + 0.5,lightviewpos[i].z/2.0 + 0.5,lightviewpos[i].w);
|
||||
lightviewpos[i].z = (2.0 * near) / (far + near - lightviewpos[i].z * (far - near));
|
||||
}
|
||||
gl_Position = projModelViewMatrix * gl_Position;
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
}
|
||||
|
22
Objects/Cuboid/Cuboid.py
Normal file
22
Objects/Cuboid/Cuboid.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
from OpenGL.GLUT import *
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GL import *
|
||||
from Objects.Objects import *
|
||||
|
||||
class Cuboid(Object):
|
||||
GeometryShaderId = -1
|
||||
|
||||
def __init__(self):
|
||||
Object.__init__(self)
|
||||
if(Cuboid.GeometryShaderId == -1):
|
||||
self.initializeShader()
|
||||
def initializeShader(self)->bool:
|
||||
with open('./Objects/Cuboid/cuboid_geometry.glsl', 'r') as f:
|
||||
geometry_shader_string = f.read()
|
||||
Cuboid.GeometryShaderId = glCreateShader(GL_GEOMETRY_SHADER)
|
||||
glShaderSource(Cuboid.GeometryShaderId, geometry_shader_string)
|
||||
glCompileShader(Cuboid.GeometryShaderId)
|
||||
if glGetShaderiv(Cuboid.GeometryShaderId, GL_COMPILE_STATUS) != GL_TRUE:
|
||||
raise RuntimeError(glGetShaderInfoLog(Cuboid.GeometryShaderId))
|
||||
return False
|
||||
return True
|
204
Objects/Cuboid/cuboid_geometry.glsl
Normal file
204
Objects/Cuboid/cuboid_geometry.glsl
Normal file
|
@ -0,0 +1,204 @@
|
|||
#version 410
|
||||
|
||||
layout(points) in;
|
||||
layout(triangle_strip,max_vertices=24) out;
|
||||
|
||||
uniform mat4 projModelViewMatrix;
|
||||
uniform mat3 normalMatrix;
|
||||
uniform mat3 rotMatrix;
|
||||
|
||||
layout(location = 0) in vec3 colorgeo[1];
|
||||
layout(location = 1) in vec3 size[1];
|
||||
layout(location = 0) out vec3 colorout;
|
||||
layout(location = 1) out vec3 normal;
|
||||
layout(location = 2) out vec3 pos;
|
||||
|
||||
void main(){
|
||||
//hinten
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,-1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//vorne
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,0,1));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//oben
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//unten
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(0,-1,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//links
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(-size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(-1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
//rechts
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,-size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
gl_Position = projModelViewMatrix *(gl_in[0].gl_Position + vec4(rotMatrix * vec3(size[0].x,size[0].y,-size[0].z),0));
|
||||
colorout = colorgeo[0];
|
||||
normal = normalize(rotMatrix * vec3(1,0,0));
|
||||
|
||||
pos = gl_Position.xyz;
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
}
|
14
Objects/Objects.py
Normal file
14
Objects/Objects.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
import numpy as np
|
||||
import typing
|
||||
class Object:
|
||||
GeometryShaderId = -1
|
||||
def draw(self)->bool:
|
||||
return False
|
||||
def initializeShader(self)->bool:
|
||||
return True
|
||||
def __init__(self):
|
||||
self.pos = np.zeros((3))
|
||||
self.color = np.zeros((3))
|
||||
self.programmId = -1
|
||||
def translate(self,M):
|
||||
self.pos = self.pos * M
|
119
Objects/Structure.py
Normal file
119
Objects/Structure.py
Normal file
|
@ -0,0 +1,119 @@
|
|||
from wsgiref.validate import check_errors
|
||||
|
||||
from OpenGL.GL.ARB.vertex_array_object import glDeleteVertexArrays
|
||||
from OpenGL.GL.framebufferobjects import glBindFramebuffer
|
||||
from OpenGL.GLUT import *
|
||||
import OpenGL.GLUT.freeglut
|
||||
from OpenGL.GLU import *
|
||||
from OpenGL.GL import *
|
||||
|
||||
import numpy as np
|
||||
|
||||
def check_error(message):
|
||||
gl_error = glGetError()
|
||||
if (gl_error != GL_NO_ERROR):
|
||||
print("Error: " + message)
|
||||
if (gluErrorString(gl_error)):
|
||||
print(gluErrorString(gl_error))
|
||||
else:
|
||||
print(hex(gl_error))
|
||||
return True
|
||||
return False
|
||||
|
||||
class Structure:
|
||||
def __init__(self):
|
||||
self.Objects = {}
|
||||
self.vais = {}
|
||||
self.Matrix = np.identity(4,np.float32)
|
||||
self.dirty = False
|
||||
|
||||
def addShape(self,program,shape):
|
||||
if not program in self.Objects.keys():
|
||||
self.Objects[program] = []
|
||||
self.Objects[program].append(shape)
|
||||
self.dirty = True
|
||||
|
||||
def removeShape(self,program,shape):
|
||||
if program in self.Objects.keys():
|
||||
self.Objects[program].remove(shape)
|
||||
if len(self.Objects[program]) == 0:
|
||||
self.Objects.pop(program)
|
||||
self.dirty = True
|
||||
|
||||
def buildvertexArrays(self):
|
||||
if self.dirty:
|
||||
self.clearVertexArrays()
|
||||
glEnableClientState(GL_VERTEX_ARRAY)
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
|
||||
glEnableClientState(GL_NORMAL_ARRAY)
|
||||
glEnableClientState(GL_COLOR_ARRAY)
|
||||
self.vais = {}
|
||||
|
||||
for key,objects in self.Objects.items():
|
||||
tvai = GLuint(-1)
|
||||
tpbi = -1
|
||||
tcbi = -1
|
||||
tsbi = -1
|
||||
glGenVertexArrays(1, tvai)
|
||||
glBindVertexArray(tvai)
|
||||
|
||||
vid = glGetAttribLocation(key, "in_position")
|
||||
glEnableVertexAttribArray(vid)
|
||||
|
||||
tpbi = glGenBuffers(1)
|
||||
glBindBuffer(GL_ARRAY_BUFFER, tpbi)
|
||||
positions = []
|
||||
for o in objects:
|
||||
positions.append(o.pos[0])
|
||||
positions.append(o.pos[1])
|
||||
positions.append(o.pos[2])
|
||||
glBufferData(GL_ARRAY_BUFFER, np.asarray(positions), GL_STATIC_DRAW)
|
||||
glVertexAttribPointer(vid, 3, GL_FLOAT, GL_FALSE, 0, None)
|
||||
check_error("Could not create position buffer")
|
||||
|
||||
colors = []
|
||||
for o in objects:
|
||||
colors.append(o.color[0])
|
||||
colors.append(o.color[1])
|
||||
colors.append(o.color[2])
|
||||
tcbi = glGenBuffers(1)
|
||||
glBindBuffer(GL_ARRAY_BUFFER, tcbi)
|
||||
glBufferData(GL_ARRAY_BUFFER, np.asarray(colors), GL_STATIC_DRAW)
|
||||
vc = glGetAttribLocation(key, "MyInColor")
|
||||
if vc != -1:
|
||||
glEnableVertexAttribArray(vc)
|
||||
glVertexAttribPointer(vc, 3, GL_FLOAT, GL_FALSE, 0, None)
|
||||
check_error("Could not create color buffer")
|
||||
|
||||
if hasattr(objects[0],'size'):
|
||||
sizes = []
|
||||
for o in objects:
|
||||
sizes.append(o.size[0])
|
||||
sizes.append(o.size[1])
|
||||
sizes.append(o.size[2])
|
||||
tsbi = glGenBuffers(1)
|
||||
glBindBuffer(GL_ARRAY_BUFFER, tsbi)
|
||||
glBufferData(GL_ARRAY_BUFFER, np.asarray(sizes), GL_STATIC_DRAW)
|
||||
vs = glGetAttribLocation(key, "MyInSize")
|
||||
if vs != -1:
|
||||
glEnableVertexAttribArray(vs)
|
||||
glVertexAttribPointer(vs, 3, GL_FLOAT, GL_FALSE, 0, None)
|
||||
check_error("Could not create size buffer")
|
||||
|
||||
glBindVertexArray(0)
|
||||
self.vais[key] = (tvai,tpbi,tcbi,tsbi)
|
||||
self.dirty = False
|
||||
|
||||
def clearVertexArrays(self):
|
||||
for key,(a,p,c,s) in self.vais.items():
|
||||
if p != -1:
|
||||
glDisableVertexAttribArray(p)
|
||||
glDeleteBuffers(1,[p])
|
||||
if c != -1:
|
||||
glDisableVertexAttribArray(c)
|
||||
glDeleteBuffers(1,[c])
|
||||
if s != -1 and s != GLuint(-1):
|
||||
glDisableVertexAttribArray(s)
|
||||
glDeleteBuffers(1,[s])
|
||||
glDeleteVertexArrays(1, a)
|
||||
check_error("Could not destroy vertex array")
|
Loading…
Add table
Add a link
Reference in a new issue