physics.html 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Physics</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript" src="../build/escher.js"></script>
  9. <script type="text/javascript" src="./lib/p2.min.js"></script>
  10. <script type="text/javascript">
  11. var division = document.createElement("div");
  12. division.style.position = "absolute";
  13. division.style.width = "100%";
  14. division.style.height = "100%";
  15. division.style.top = "0px";
  16. division.style.left = "0px";
  17. division.style.overflow = "hidden";
  18. document.body.appendChild(division);
  19. // Setup the display canvas
  20. var canvas = document.createElement("canvas");
  21. canvas.style.position = "absolute";
  22. canvas.style.width = "100%";
  23. canvas.style.height = "100%";
  24. canvas.style.top = "0px";
  25. canvas.style.left = "0px";
  26. canvas.width = window.innerWidth;
  27. canvas.height = window.innerHeight;
  28. canvas.oncontextmenu = function(event)
  29. {
  30. event.preventDefault();
  31. return false;
  32. };
  33. division.appendChild(canvas);
  34. window.onresize = function()
  35. {
  36. canvas.width = window.innerWidth;
  37. canvas.height = window.innerHeight;
  38. };
  39. var group = new Escher.Object2D();
  40. // Init p2.js
  41. var world = new p2.World();
  42. // Add a circle
  43. var circleShape = new p2.Circle({radius: 1});
  44. var circleBody = new p2.Body({mass: 1, position: [0,0]});
  45. circleBody.addShape(circleShape);
  46. world.addBody(circleBody);
  47. var circle = new Escher.Circle();
  48. circle.radius = 1.0;
  49. group.add(circle);
  50. // Add a plane
  51. var planeShape = new p2.Plane();
  52. var planeBody = new p2.Body();
  53. planeBody.addShape(planeShape);
  54. world.addBody(planeBody);
  55. var plane = new Escher.Box();
  56. plane.box.min.set(-100, 0);
  57. plane.box.max.set(100, 100);
  58. group.add(plane);
  59. var viewport = new Escher.Viewport(canvas);
  60. viewport.scale = 35.0;
  61. viewport.position.set(900, 650);
  62. var time = performance.now();
  63. var renderer = new Escher.Renderer(canvas);
  64. renderer.createRenderLoop(group, viewport, function()
  65. {
  66. circle.position.set(circleBody.position[0], -circleBody.position[1]);
  67. plane.position.y = -planeBody.position[1];
  68. // Move physics bodies forward in time
  69. world.step(1/60);
  70. });
  71. </script>
  72. </body>
  73. </html>