Guest User

LightingHandler Gitch

a guest
Mar 30th, 2014
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.60 KB | None | 0 0
  1. LightingHandler Render:
  2.  
  3. public void render() {
  4.         TextureUtil.disableTextures();
  5.         for (Light light : lights) {
  6.             glColorMask(false, false, false, false);
  7.             glStencilFunc(GL_ALWAYS, 1, 1);
  8.             glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
  9.  
  10.             for (Mesh object : objects) {
  11.                 if(object.shaded){
  12.                     Vector2f[] vertices = object.getVertices();
  13.                     for (int i = 0; i < vertices.length; i++) {
  14.                         Vector2f currentVertex = vertices[i];
  15.                         Vector2f nextVertex = vertices[(i + 1) % vertices.length];
  16.                         Vector2f edge = Vector2f.sub(nextVertex, currentVertex, null);
  17.                         Vector2f normal = new Vector2f(edge.getY(), -edge.getX());
  18.                         Vector2f lightToCurrent = Vector2f.sub(currentVertex, light.location, null);
  19.                         if (Vector2f.dot(normal, lightToCurrent) > 0) {
  20.                             Vector2f point1 = Vector2f.add(currentVertex, (Vector2f) Vector2f.sub(currentVertex, light.location, null).scale(800), null);
  21.                             Vector2f point2 = Vector2f.add(nextVertex, (Vector2f) Vector2f.sub(nextVertex, light.location, null).scale(800), null);
  22.                             glBegin(GL_QUADS); {
  23.                                 glVertex2f(currentVertex.getX(), currentVertex.getY());
  24.                                 glVertex2f(point1.getX(), point1.getY());
  25.                                 glVertex2f(point2.getX(), point2.getY());
  26.                                 glVertex2f(nextVertex.getX(), nextVertex.getY());
  27.                             } glEnd();
  28.                         }
  29.                     }
  30.                 }
  31.             }
  32.  
  33.             glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
  34.             glStencilFunc(GL_EQUAL, 0, 1);
  35.             glColorMask(true, true, true, true);
  36.  
  37.             glUseProgram(shaderProgram);
  38.             glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), light.location.getX(), Display.getHeight() - light.location.getY());
  39.             glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), light.red, light.green, light.blue);
  40.            
  41.             glEnable(GL_BLEND);
  42.             glBlendFunc(GL_ONE, GL_ONE);
  43.            
  44.             GL11.glColor4f(0, 0, 0, 0);
  45.            
  46.             glBegin(GL_QUADS); {
  47.                 glVertex2f(0, 0);
  48.                 glVertex2f(0, Display.getHeight());
  49.                 glVertex2f(Display.getWidth(), Display.getHeight());
  50.                 glVertex2f(Display.getWidth(), 0);
  51.             } glEnd();
  52.            
  53.             glDisable(GL_BLEND);
  54.             glUseProgram(0);
  55.             glClear(GL_STENCIL_BUFFER_BIT);
  56.         }
  57.        
  58.         for (Mesh mesh : objects) {
  59.             glBegin(GL_QUADS); {
  60.                 for (Vector2f vertex : mesh.getVertices()) {
  61.                     glVertex2f(vertex.getX(), vertex.getY());
  62.                 }
  63.             } glEnd();
  64.         }
  65.     }
  66.  
  67.  
  68. LightingHandler init:
  69.  
  70. public void init() {
  71.         shaderProgram = glCreateProgram();
  72.         fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  73.         StringBuilder fragmentShaderSource = new StringBuilder();
  74.        
  75.         try {
  76.             String line;
  77.             BufferedReader reader = new BufferedReader(new FileReader("project-assets/shaders/shader.fs"));
  78.             while ((line = reader.readLine()) != null) {
  79.                 fragmentShaderSource.append(line).append("\n");
  80.             }
  81.             reader.close();
  82.         } catch (FileNotFoundException e) {
  83.             e.printStackTrace();
  84.         } catch (IOException e) {
  85.             e.printStackTrace();
  86.         }
  87.  
  88.         glShaderSource(fragmentShader, fragmentShaderSource);
  89.         glCompileShader(fragmentShader);
  90.         if (glGetShaderi(fragmentShader, GL_COMPILE_STATUS) == GL_FALSE) {
  91.             System.err.println("Fragment shader not compiled!");
  92.             System.err.println(GLU.gluErrorString(glGetError()));
  93.         }
  94.  
  95.         glAttachShader(shaderProgram, fragmentShader);
  96.         glLinkProgram(shaderProgram);
  97.         glValidateProgram(shaderProgram);
  98.     }
  99.  
  100. Shader.fs:
  101.  
  102. uniform vec2 lightLocation;
  103. uniform vec3 lightColor;
  104. uniform float screenHeight;
  105.  
  106. void main() {
  107.     float distance = length(lightLocation - gl_FragCoord.xy);
  108.     float attenuation = 1.0 / distance;
  109.     vec4 color = vec4(attenuation, attenuation, attenuation, pow(attenuation, 3)) * vec4(lightColor, 1);
  110.  
  111.     gl_FragColor = color;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment