Modelo de Luces

by Víctor Garzón Marín

HTML

<script src="https://rawgit.com/vgarzom/webgl_shadows/master/libs/bezier.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/libs/gl-matrix.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/libs/webgl-obj-loader.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/libs/webgl-utils.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/drawables.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/figures.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/globals.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/helpers.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/initialize-shadow.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/initialize.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/interface_controller.js"></script>
<script src="https://rawgit.com/vgarzom/webgl_shadows/master/worldlogic.js"></script>
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <!-- Shadow Shader-->
  <script id="shadow-shader-fs" type="x-shader/x-fragment">
    varying highp float distance;
    void main() {
      highp float d = distance;
      gl_FragColor = vec4(d, d, d, 1.0); // Write the z-value in R
    }
  </script>

  <script id="shadow-shader-vs" type="x-shader/x-vertex">
    attribute vec4 a_Position;
    uniform mat4 u_MvpMatrix;
    uniform mat4 uProjectionMatrix;
    varying highp float distance;
    
    void main() {

      vec4 cs_position = normalize(uProjectionMatrix * u_MvpMatrix * a_Position);
      distance = cs_position.z;
      gl_Position = uProjectionMatrix * u_MvpMatrix * a_Position;
    }
  </script>
  <!-- Main Shader -->

  <script id="shader-fs" type="x-shader/x-fragment">
    //Estructura de datos para las luces puntuales
    struct LightInfo {
      highp vec3 position; //Posicion de la luz puntual
     ...

JavaScript

function render(now) {
  now *= 0.001;  // convert to seconds
  app.deltaTime = now - app.then;
  app.then = now;
  app.drawScene();
  requestAnimationFrame(render);
}

function webGLStart() {
  //Indicamos donde se encuentran las texturas
  texturesBaseUrl = "https://rawgit.com/vgarzom/webgl_shadows/master/textures/";
  //
  canvas = document.getElementById("mycanvas");
  initGL(canvas);
  //Inicializamos los shaders
  initShadowShaders();
  initShaders();
  //Inicializamos ambos programas, tanto para los shadows como para dibujar normal
  initShadowProgramInfo();
  initProgramInfo();

  //Inicializamos el framebuffer para la carga de la textura de sombras
  app.depthShadow.fbo = initFramebufferObject();

  initBuffers();
  initTextures();
  initInterfaceListeners();

  gl.clearColor(34.0/255.0, 63.0/255.0, 94.0/255.0, 1.0);
  gl.enable(gl.DEPTH_TEST);
  requestAnimationFrame(render);
}

  webGLStart();