Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LightingHandler Render:
- public void render() {
- TextureUtil.disableTextures();
- for (Light light : lights) {
- glColorMask(false, false, false, false);
- glStencilFunc(GL_ALWAYS, 1, 1);
- glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
- for (Mesh object : objects) {
- if(object.shaded){
- Vector2f[] vertices = object.getVertices();
- for (int i = 0; i < vertices.length; i++) {
- Vector2f currentVertex = vertices[i];
- Vector2f nextVertex = vertices[(i + 1) % vertices.length];
- Vector2f edge = Vector2f.sub(nextVertex, currentVertex, null);
- Vector2f normal = new Vector2f(edge.getY(), -edge.getX());
- Vector2f lightToCurrent = Vector2f.sub(currentVertex, light.location, null);
- if (Vector2f.dot(normal, lightToCurrent) > 0) {
- Vector2f point1 = Vector2f.add(currentVertex, (Vector2f) Vector2f.sub(currentVertex, light.location, null).scale(800), null);
- Vector2f point2 = Vector2f.add(nextVertex, (Vector2f) Vector2f.sub(nextVertex, light.location, null).scale(800), null);
- glBegin(GL_QUADS); {
- glVertex2f(currentVertex.getX(), currentVertex.getY());
- glVertex2f(point1.getX(), point1.getY());
- glVertex2f(point2.getX(), point2.getY());
- glVertex2f(nextVertex.getX(), nextVertex.getY());
- } glEnd();
- }
- }
- }
- }
- glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
- glStencilFunc(GL_EQUAL, 0, 1);
- glColorMask(true, true, true, true);
- glUseProgram(shaderProgram);
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), light.location.getX(), Display.getHeight() - light.location.getY());
- glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), light.red, light.green, light.blue);
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE);
- GL11.glColor4f(0, 0, 0, 0);
- glBegin(GL_QUADS); {
- glVertex2f(0, 0);
- glVertex2f(0, Display.getHeight());
- glVertex2f(Display.getWidth(), Display.getHeight());
- glVertex2f(Display.getWidth(), 0);
- } glEnd();
- glDisable(GL_BLEND);
- glUseProgram(0);
- glClear(GL_STENCIL_BUFFER_BIT);
- }
- for (Mesh mesh : objects) {
- glBegin(GL_QUADS); {
- for (Vector2f vertex : mesh.getVertices()) {
- glVertex2f(vertex.getX(), vertex.getY());
- }
- } glEnd();
- }
- }
- LightingHandler init:
- public void init() {
- shaderProgram = glCreateProgram();
- fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- StringBuilder fragmentShaderSource = new StringBuilder();
- try {
- String line;
- BufferedReader reader = new BufferedReader(new FileReader("project-assets/shaders/shader.fs"));
- while ((line = reader.readLine()) != null) {
- fragmentShaderSource.append(line).append("\n");
- }
- reader.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- glShaderSource(fragmentShader, fragmentShaderSource);
- glCompileShader(fragmentShader);
- if (glGetShaderi(fragmentShader, GL_COMPILE_STATUS) == GL_FALSE) {
- System.err.println("Fragment shader not compiled!");
- System.err.println(GLU.gluErrorString(glGetError()));
- }
- glAttachShader(shaderProgram, fragmentShader);
- glLinkProgram(shaderProgram);
- glValidateProgram(shaderProgram);
- }
- Shader.fs:
- uniform vec2 lightLocation;
- uniform vec3 lightColor;
- uniform float screenHeight;
- void main() {
- float distance = length(lightLocation - gl_FragCoord.xy);
- float attenuation = 1.0 / distance;
- vec4 color = vec4(attenuation, attenuation, attenuation, pow(attenuation, 3)) * vec4(lightColor, 1);
- gl_FragColor = color;
- }
Advertisement
Add Comment
Please, Sign In to add comment