-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCode
More file actions
89 lines (68 loc) · 2.69 KB
/
Copy pathCode
File metadata and controls
89 lines (68 loc) · 2.69 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package de.simagdo.simagdoRPG.engineTester;
import de.simagdo.simagdoRPG.entities.Camera;
import de.simagdo.simagdoRPG.entities.Entity;
import de.simagdo.simagdoRPG.renderEngine.DisplayManager;
import de.simagdo.simagdoRPG.renderEngine.Loader;
import de.simagdo.simagdoRPG.renderEngine.OBJLoader;
import de.simagdo.simagdoRPG.renderEngine.EntityRenderer;
import de.simagdo.simagdoRPG.models.RawModel;
import de.simagdo.simagdoRPG.models.TextureModel;
import de.simagdo.simagdoRPG.shaders.StaticShader;
import de.simagdo.simagdoRPG.textures.ModelTexture;
import org.lwjgl.opengl.Display;
import org.lwjgl.util.vector.Vector3f;
public class MainGameLoop {
public static void main(String[] args) {
DisplayManager.createDisplay();
Loader loader = new Loader();
StaticShader shader = new StaticShader();
Renderer renderer = new Renderer(shader);
RawModel model = OBJLoader.loadObjModel("stall",loader);
TextureModel staticModel = new TextureModel(model, new ModelTexture(loader.loadTexture("stallTexture")));
System.out.println(staticModel.toString());
Entity entity = new Entity(staticModel, new Vector3f(0, 0, -50), 0, 0, 0, 1);
Camera camera = new Camera();
while (!Display.isCloseRequested()) {
entity.increaseRotation(0, 1, 0);
camera.move();
renderer.prepare();
shader.start();
shader.loadViewMatrix(camera);
renderer.render(entity, shader);
shader.stop();
DisplayManager.updateDisplay();
}
shader.clear();
loader.clear();
DisplayManager.closeDisplay();
}
}
#version 400 core
in vec3 position;
in vec2 textureCoordinates;
in vec3 normal;
out vec2 pass_textureCoordinates;
out vec3 surfaceNormal;
out vec3 toLightVector[4];
out vec3 toCameraVector;
out float visibility;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform vec3 lightPosition[4];
const float density = 0.007;
const float gradient = 1.5;
void main(void){
vec4 worldPosition = transformationMatrix * vec4(position,1.0);
vec4 positionRelativeToCamera = viewMatrix * worldPosition;
gl_Position = projectionMatrix * positionRelativeToCamera;
pass_textureCoordinates = textureCoordinates;
surfaceNormal = (transformationMatrix * vec4(normal,0.0)).xyz;
for(int i = 0; i < 4; i++) {
toLightVector[i] = lightPosition[i] - worldPosition.xyz;
}
toCameraVector = (inverse(viewMatrix) * vec4(0.0,0.0,0.0,1.0)).xyz - worldPosition.xyz;
float distance = length(positionRelativeToCamera.xyz);
visibility = exp(-pow((distance*density),gradient));
visibility = clamp(visibility,0.0,1.0);
}