Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Render()
- {
- // Clear the screen
- context.clearRect(0, 0, canvas.width, canvas.height);
- var n = -0.5;
- var f = -100.0;
- var l = -1;
- var r = 1;
- var t = -1;
- var b = 1;
- var width = 800;
- var height = 600;
- var projectionMatrix = new Matrix4x4(n / r, 0, 0, 0,
- 0, n / t, 0, 0,
- 0, 0, -(f + n) / (f - n), -2 * f * n / (f - n),
- 0, 0, -1, 0);
- var viewMatrix = Matrix4x4.Translation(0, 0, 1);
- var viewportMatrix = new Matrix4x4(width / 2, 0, 0, width / 2,
- 0, height / 2, 0, height / 2,
- 0, 0, (f - n) / 2, (f + n) / 2,
- 0, 0, 0, 1);
- for (var meshIterator = 0; meshIterator < meshes.length; ++meshIterator)
- {
- var mesh = meshes[meshIterator];
- 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))));
- var modelViewMatrix = viewMatrix.Multiply(modelMatrix);
- for (var vertexIterator = 0; vertexIterator < mesh.vertices.length; ++vertexIterator)
- {
- var vertex = mesh.vertices[vertexIterator];
- var eyeCoordinates = modelViewMatrix.Transform(new Vector4(vertex.position.X, vertex.position.Y, vertex.position.Z, 1));
- var clipCoordinates = projectionMatrix.Transform(eyeCoordinates);
- // TODO: Clip vertices
- var normalizedDeviceCoordinates = new Vector4(clipCoordinates.X / clipCoordinates.W,
- clipCoordinates.Y / clipCoordinates.W,
- clipCoordinates.Z / clipCoordinates.W,
- 1);
- var windowCoordinates = viewportMatrix.Transform(normalizedDeviceCoordinates);
- //Log("(" + windowCoordinates.X + ", " + windowCoordinates.Y + ")");
- context.fillStyle = vertex.color;
- context.fillRect(windowCoordinates.X - 2, windowCoordinates.Y - 2, 4, 4);
- }
- context.strokeStyle = "#999999";
- context.lineWidth = 1;
- for (var edgeIterator = 0; edgeIterator < mesh.edges.length; edgeIterator += 2)
- {
- var vertex1 = mesh.vertices[mesh.edges[edgeIterator]].position;
- var vertex2 = mesh.vertices[mesh.edges[edgeIterator + 1]].position;
- var eyeCoordinates1 = modelViewMatrix.Transform(new Vector4(vertex1.X, vertex1.Y, vertex1.Z, 1));
- var clipCoordinates1 = projectionMatrix.Transform(eyeCoordinates1);
- // TODO: Clip vertices
- var normalizedDeviceCoordinates1 = new Vector4(clipCoordinates1.X / clipCoordinates1.W,
- clipCoordinates1.Y / clipCoordinates1.W,
- clipCoordinates1.Z / clipCoordinates1.W,
- 1);
- var windowCoordinates1 = viewportMatrix.Transform(normalizedDeviceCoordinates1);
- var eyeCoordinates2 = modelViewMatrix.Transform(new Vector4(vertex2.X, vertex2.Y, vertex2.Z, 1));
- var clipCoordinates2 = projectionMatrix.Transform(eyeCoordinates2);
- // TODO: Clip vertices
- var normalizedDeviceCoordinates2 = new Vector4(clipCoordinates2.X / clipCoordinates2.W,
- clipCoordinates2.Y / clipCoordinates2.W,
- clipCoordinates2.Z / clipCoordinates2.W,
- 1);
- var windowCoordinates2 = viewportMatrix.Transform(normalizedDeviceCoordinates2);
- context.beginPath();
- context.moveTo(windowCoordinates1.X, windowCoordinates1.Y);
- context.lineTo(windowCoordinates2.X, windowCoordinates2.Y);
- context.closePath();
- context.stroke();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement