scene sceneobjects images/textures/animated sprites sounds camera lights bounding box direction/angle animation & easing functions sphere collision bounds collision function abs(a) { return Math.abs(a); } function length(a) { return Math.sqrt(a.x*a.x + a.y*a.y + a.z*a.z); } function distance(a, b) { return Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + (a.z - b.z) * (a.z - b.z)); } var p1 = { x: 20, y: 20 }; var p2 = { x: 40, y: 40 }; // angle in radians var angleRadians = Math.atan2(p2.y - p1.y, p2.x - p1.x); // angle in degrees var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI; // http://onedayitwillmake.com/blog/2011/09/getting-the-angle-between-two-3d-points/ function() { // Make up two vectors var vectorA = new Vector3(5, -20, -14); var vectorB = new Vector3(-1, 3, 2); // Store some information about them for below var dot = vectorA.dot(vectorB); var lengthA = vectorA.length(); var lengthB = vectorB.length(); // Now to find the angle var theta = Math.acos( dot / (lengthA * lengthB) ); // Theta = 3.06 radians or 175.87 degrees // But what can you do with it? } function now() { return (new Date()).getTime() / 1000.0; } /// Check intersections / collisions /// https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection function isPointInsideAABB(point, box) { return (point.x >= box.minX && point.x <= box.maxX) && (point.y >= box.minY && point.y <= box.maxY) && (point.z >= box.minY && point.z <= box.maxZ); } function intersectCubes(a, b) { return (a.minX <= b.maxX && a.maxX >= b.minX) && (a.minY <= b.maxY && a.maxY >= b.minY) && (a.minZ <= b.maxZ && a.maxZ >= b.minZ); } function intersectSpheres(a, b) { // we are using multiplications because it's faster than calling Math.pow var distance = Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + (a.z - b.z) * (a.z - b.z)); return distance < (a.radius + b.radius); } function intersectSphereBox(sphere, box) { // get box closest point to sphere center by clamping var x = Math.max(box.minX, Math.min(sphere.x, box.maxX); var y = Math.max(box.minY, Math.min(sphere.y, box.maxY); var z = Math.max(box.minZ, Math.min(sphere.z, box.maxZ); // this is the same as isPointInsideSphere var distance = Math.sqrt((x - sphere.x) * (x - sphere.x) + (y - sphere.y) * (y - sphere.y) + (z - sphere.z) * (z - sphere.z)); return distance < sphere.radius; } function doStep(factor) { objects.forEach(function(object) { object.prevPosition = object.position; if (object.velocity) object.position += (factor * object.velocity); if (object.acceleration) object.velocity += (factor * object.acceleration); if (object.friction) object.velocity -= (factor * object.friction); object.collisionCheck(); }; } var speed = 1; var prevTime = null; function step(timestamp) { if (!prevTime) { prevTime = now(); } var elapsed = now() - prevTime; factor = elapsed * speed; if (factor > 0) { doStep(factor); } window.requestAnimationFrame(step); } window.requestAnimationFrame(step);
https://www.codeproject.com/Articles/43751/Battlefield-Simulator
61700cookie-checkJavascript Game functions