Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Render()
  2. {
  3.     // Clear the screen
  4.     context.clearRect(0, 0, canvas.width, canvas.height);
  5.  
  6.     var n = -0.5;
  7.     var f = -100.0;
  8.     var l = -1;
  9.     var r = 1;
  10.     var t = -1;
  11.     var b = 1;
  12.    
  13.     var width = 800;
  14.     var height = 600;
  15.  
  16.     var projectionMatrix = new Matrix4x4(n / r, 0, 0, 0,
  17.                                          0, n / t, 0, 0,
  18.                                          0, 0, -(f + n) / (f - n), -2 * f * n / (f - n),
  19.                                          0, 0, -1, 0);
  20.  
  21.     var viewMatrix = Matrix4x4.Translation(0, 0, 1);
  22.  
  23.     var viewportMatrix = new Matrix4x4(width / 2, 0, 0, width / 2,
  24.                                        0, height / 2, 0, height / 2,
  25.                                        0, 0, (f - n) / 2, (f + n) / 2,
  26.                                        0, 0, 0, 1);
  27.    
  28.     for (var meshIterator = 0; meshIterator < meshes.length; ++meshIterator)
  29.     {
  30.         var mesh = meshes[meshIterator];
  31.        
  32.         var modelMatrix = Matrix4x4.Translation(mesh.position.X, mesh.position.Y, mesh.position.Z).Multiply(Matrix4x4.RotationX(mesh.rotationX).Multiply(Matrix4x4.RotationY(mesh.rotationY).Multiply(Matrix4x4.RotationZ(mesh.rotationZ))));
  33.  
  34.         var modelViewMatrix = viewMatrix.Multiply(modelMatrix);
  35.  
  36.         for (var vertexIterator = 0; vertexIterator < mesh.vertices.length; ++vertexIterator)
  37.         {
  38.             var vertex = mesh.vertices[vertexIterator];
  39.             var eyeCoordinates = modelViewMatrix.Transform(new Vector4(vertex.position.X, vertex.position.Y, vertex.position.Z, 1));
  40.             var clipCoordinates = projectionMatrix.Transform(eyeCoordinates);
  41.             // TODO: Clip vertices
  42.             var normalizedDeviceCoordinates = new Vector4(clipCoordinates.X / clipCoordinates.W,
  43.                                                           clipCoordinates.Y / clipCoordinates.W,
  44.                                                           clipCoordinates.Z / clipCoordinates.W,
  45.                                                           1);
  46.             var windowCoordinates = viewportMatrix.Transform(normalizedDeviceCoordinates);
  47.             //Log("(" + windowCoordinates.X + ", " + windowCoordinates.Y + ")");
  48.             context.fillStyle = vertex.color;
  49.             context.fillRect(windowCoordinates.X - 2, windowCoordinates.Y - 2, 4, 4);
  50.         }
  51.        
  52.         context.strokeStyle = "#999999";
  53.         context.lineWidth = 1;
  54.         for (var edgeIterator = 0; edgeIterator < mesh.edges.length; edgeIterator += 2)
  55.         {
  56.             var vertex1 = mesh.vertices[mesh.edges[edgeIterator]].position;
  57.             var vertex2 = mesh.vertices[mesh.edges[edgeIterator + 1]].position;
  58.  
  59.             var eyeCoordinates1 = modelViewMatrix.Transform(new Vector4(vertex1.X, vertex1.Y, vertex1.Z, 1));
  60.             var clipCoordinates1 = projectionMatrix.Transform(eyeCoordinates1);
  61.             // TODO: Clip vertices
  62.             var normalizedDeviceCoordinates1 = new Vector4(clipCoordinates1.X / clipCoordinates1.W,
  63.                                                           clipCoordinates1.Y / clipCoordinates1.W,
  64.                                                           clipCoordinates1.Z / clipCoordinates1.W,
  65.                                                           1);
  66.             var windowCoordinates1 = viewportMatrix.Transform(normalizedDeviceCoordinates1);
  67.  
  68.             var eyeCoordinates2 = modelViewMatrix.Transform(new Vector4(vertex2.X, vertex2.Y, vertex2.Z, 1));
  69.             var clipCoordinates2 = projectionMatrix.Transform(eyeCoordinates2);
  70.             // TODO: Clip vertices
  71.             var normalizedDeviceCoordinates2 = new Vector4(clipCoordinates2.X / clipCoordinates2.W,
  72.                                                           clipCoordinates2.Y / clipCoordinates2.W,
  73.                                                           clipCoordinates2.Z / clipCoordinates2.W,
  74.                                                           1);
  75.             var windowCoordinates2 = viewportMatrix.Transform(normalizedDeviceCoordinates2);
  76.             context.beginPath();
  77.             context.moveTo(windowCoordinates1.X, windowCoordinates1.Y);  
  78.             context.lineTo(windowCoordinates2.X, windowCoordinates2.Y);
  79.             context.closePath();
  80.             context.stroke();
  81.         }
  82.        
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement