Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <title>Rubik's Cube</title>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
- <style>
- body { font-family: Monospace; background-color: #000; color: #fff; margin: 0px; overflow: hidden; }
- #info { color: #fff; position: absolute; top: 10px; width: 100%; text-align: center; z-index: 100; display:block; }
- #info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer }
- </style>
- </head>
- <body>
- <script src="threejs/build/three.min.js"></script>
- <script src="threejs/examples/js/controls/TrackballControls.js"></script>
- <script src="threejs/examples/js/Detector.js"></script>
- <script src="threejs/examples/js/libs/stats.min.js"></script>
- <script>
- var container, stats;
- var camera, scene, renderer, controls;
- var projector, raycaster;
- var material;
- var mouse = new THREE.Vector2();
- var mouseMotion = 0;
- var windowHalfX = window.innerWidth / 2;
- var windowHalfY = window.innerHeight / 2;
- var center;
- var orange = new THREE.Color("orange");
- var red = new THREE.Color("red");
- var white = new THREE.Color("white");
- var yellow = new THREE.Color("yellow");
- var blue = new THREE.Color("blue");
- var green = new THREE.Color("green");
- var black = new THREE.Color("black");
- init();
- animate();
- function init() {
- //material
- material = new THREE.MeshLambertMaterial({
- vertexColors: THREE.FaceColors,
- shading: THREE.FlatShading
- });
- // DOM container element
- container = document.createElement('div');
- document.body.appendChild(container);
- // renderer
- renderer = new THREE.WebGLRenderer();
- renderer.setSize(window.innerWidth, window.innerHeight);
- renderer.setClearColor(new THREE.Color(0x252530));
- container.appendChild(renderer.domElement);
- //
- projector = new THREE.Projector();
- raycaster = new THREE.Raycaster();
- // camera
- camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 200 );
- camera.position.z = 40;
- camera.position.x = -40;
- camera.position.y = 40;
- controls = new THREE.TrackballControls(camera,container);
- controls.rotateSpeed = 1.0;
- controls.zoomSpeed = 1.2;
- controls.panSpeed = 0.8;
- controls.noZoom = false;
- controls.noPan = false;
- controls.staticMoving = true;
- controls.dynamicDampingFactor = 0.3;
- controls.keys = [65,83,68];
- controls.addEventListener('change',render);
- // scene
- scene = new THREE.Scene();
- scene.add(camera);
- // cube
- var center_geom = new THREE.CubeGeometry(10,10,10);
- center = new THREE.Mesh(center_geom, material);
- for(var i = 0; i < 12; i ++){
- center_geom.faces[i].color = black;
- }
- scene.add(center);
- //up
- var up_geom = new THREE.CubeGeometry(10,10,10);
- up = new THREE.Mesh(up_geom,material);
- up.position.y = 12.5;
- for(var i = 0; i < 12; i ++){
- up_geom.faces[i].color = black;
- }
- up_geom.faces[4].color = white;
- up_geom.faces[5].color = white;
- scene.add(up);
- //down
- var down_geom = new THREE.CubeGeometry(10,10,10);
- down = new THREE.Mesh(down_geom,material);
- down.position.y = -12.5;
- for(var i = 0; i < 12; i ++){
- down_geom.faces[i].color = black;
- }
- down_geom.faces[6].color = yellow;
- down_geom.faces[7].color = yellow;
- scene.add(down);
- //left
- var left_geom = new THREE.CubeGeometry(10,10,10);
- left = new THREE.Mesh(left_geom,material);
- left.position.x = -12.5;
- for(var i = 0; i < 12; i ++){
- left_geom.faces[i].color = black;
- }
- left_geom.faces[2].color = blue;
- left_geom.faces[3].color = blue;
- scene.add(left);
- //right
- var right_geom = new THREE.CubeGeometry(10,10,10);
- right = new THREE.Mesh(right_geom,material);
- right.position.x = 12.5;
- for(var i = 0; i < 12; i ++){
- right_geom.faces[i].color = black;
- }
- right_geom.faces[0].color = green;
- right_geom.faces[1].color = green;
- scene.add(right);
- //front
- var front_geom = new THREE.CubeGeometry(10,10,10);
- front = new THREE.Mesh(front_geom,material);
- front.position.z = 12.5;
- for(var i = 0; i < 12; i ++){
- front_geom.faces[i].color = black;
- }
- front_geom.faces[8].color = red;
- front_geom.faces[9].color = red;
- scene.add(front);
- //back
- var back_geom = new THREE.CubeGeometry(10,10,10);
- back = new THREE.Mesh(back_geom,material);
- back.position.z = -12.5;
- for(var i = 0; i < 12; i ++){
- back_geom.faces[i].color = black;
- }
- back_geom.faces[10].color = orange;
- back_geom.faces[11].color = orange;
- scene.add(back);
- //ulf
- var ulf_geom = new THREE.CubeGeometry(10,10,10);
- ulf = new THREE.Mesh(ulf_geom, material);
- ulf.position.set(-12.5, 12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- ulf_geom.faces[i].color = black;
- }
- ulf_geom.faces[4].color = white;
- ulf_geom.faces[5].color = white;
- ulf_geom.faces[2].color = blue;
- ulf_geom.faces[3].color = blue;
- ulf_geom.faces[8].color = red;
- ulf_geom.faces[9].color = red;
- scene.add(ulf);
- //ufr
- var ufr_geom = new THREE.CubeGeometry(10,10,10);
- ufr = new THREE.Mesh(ufr_geom, material);
- ufr.position.set(12.5, 12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- ufr_geom.faces[i].color = black;
- }
- ufr_geom.faces[4].color = white;
- ufr_geom.faces[5].color = white;
- ufr_geom.faces[0].color = green;
- ufr_geom.faces[1].color = green;
- ufr_geom.faces[8].color = red;
- ufr_geom.faces[9].color = red;
- scene.add(ufr);
- //ulb
- var ulb_geom = new THREE.CubeGeometry(10,10,10);
- ulb = new THREE.Mesh(ulb_geom, material);
- ulb.position.set(-12.5, 12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- ulb_geom.faces[i].color = black;
- }
- ulb_geom.faces[4].color = white;
- ulb_geom.faces[5].color = white;
- ulb_geom.faces[2].color = blue;
- ulb_geom.faces[3].color = blue;
- ulb_geom.faces[10].color = orange;
- ulb_geom.faces[11].color = orange;
- scene.add(ulb);
- //ubr
- var ubr_geom = new THREE.CubeGeometry(10,10,10);
- ubr = new THREE.Mesh(ubr_geom, material);
- ubr.position.set(12.5, 12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- ubr_geom.faces[i].color = black;
- }
- ubr_geom.faces[4].color = white;
- ubr_geom.faces[5].color = white;
- ubr_geom.faces[0].color = green;
- ubr_geom.faces[1].color = green;
- ubr_geom.faces[10].color = orange;
- ubr_geom.faces[11].color = orange;
- scene.add(ubr);
- //dlf
- var dlf_geom = new THREE.CubeGeometry(10,10,10);
- dlf = new THREE.Mesh(dlf_geom, material);
- dlf.position.set(-12.5, -12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- dlf_geom.faces[i].color = black;
- }
- dlf_geom.faces[6].color = yellow;
- dlf_geom.faces[7].color = yellow;
- dlf_geom.faces[2].color = blue;
- dlf_geom.faces[3].color = blue;
- dlf_geom.faces[8].color = red;
- dlf_geom.faces[9].color = red;
- scene.add(dlf);
- //dfr
- var dfr_geom = new THREE.CubeGeometry(10,10,10);
- dfr = new THREE.Mesh(dfr_geom, material);
- dfr.position.set(12.5, -12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- dfr_geom.faces[i].color = black;
- }
- dfr_geom.faces[6].color = yellow;
- dfr_geom.faces[7].color = yellow;
- dfr_geom.faces[0].color = green;
- dfr_geom.faces[1].color = green;
- dfr_geom.faces[8].color = red;
- dfr_geom.faces[9].color = red;
- scene.add(dfr);
- //dlb
- var dlb_geom = new THREE.CubeGeometry(10,10,10);
- dlb = new THREE.Mesh(dlb_geom, material);
- dlb.position.set(-12.5, -12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- dlb_geom.faces[i].color = black;
- }
- dlb_geom.faces[6].color = yellow;
- dlb_geom.faces[7].color = yellow;
- dlb_geom.faces[2].color = blue;
- dlb_geom.faces[3].color = blue;
- dlb_geom.faces[10].color = orange;
- dlb_geom.faces[11].color = orange;
- scene.add(dlb);
- //dbr
- var dbr_geom = new THREE.CubeGeometry(10,10,10);
- dbr = new THREE.Mesh(dbr_geom, material);
- dbr.position.set(12.5, -12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- dbr_geom.faces[i].color = black;
- }
- dbr_geom.faces[6].color = yellow;
- dbr_geom.faces[7].color = yellow;
- dbr_geom.faces[0].color = green;
- dbr_geom.faces[1].color = green;
- dbr_geom.faces[10].color = orange;
- dbr_geom.faces[11].color = orange;
- scene.add(dbr);
- //df
- var df_geom = new THREE.CubeGeometry(10,10,10);
- df = new THREE.Mesh(df_geom, material);
- df.position.set(0, -12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- df_geom.faces[i].color = black;
- }
- df_geom.faces[6].color = yellow;
- df_geom.faces[7].color = yellow;
- df_geom.faces[8].color = red;
- df_geom.faces[9].color = red;
- scene.add(df);
- //dr
- var dr_geom = new THREE.CubeGeometry(10,10,10);
- dr = new THREE.Mesh(dr_geom, material);
- dr.position.set(12.5, -12.5, 0);
- for(var i = 0; i < 12; i ++){
- dr_geom.faces[i].color = black;
- }
- dr_geom.faces[6].color = yellow;
- dr_geom.faces[7].color = yellow;
- dr_geom.faces[0].color = green;
- dr_geom.faces[1].color = green;
- scene.add(dr);
- //db
- var db_geom = new THREE.CubeGeometry(10,10,10);
- db = new THREE.Mesh(db_geom, material);
- db.position.set(0, -12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- db_geom.faces[i].color = black;
- }
- db_geom.faces[6].color = yellow;
- db_geom.faces[7].color = yellow;
- db_geom.faces[10].color = orange;
- db_geom.faces[11].color = orange;
- scene.add(db);
- //dl
- var dl_geom = new THREE.CubeGeometry(10,10,10);
- dl = new THREE.Mesh(dl_geom, material);
- dl.position.set(-12.5, -12.5, 0);
- for(var i = 0; i < 12; i ++){
- dl_geom.faces[i].color = black;
- }
- dl_geom.faces[6].color = yellow;
- dl_geom.faces[7].color = yellow;
- dl_geom.faces[2].color = blue;
- dl_geom.faces[3].color = blue;
- scene.add(dl);
- //ul
- var ul_geom = new THREE.CubeGeometry(10,10,10);
- ul = new THREE.Mesh(ul_geom, material);
- ul.position.set(-12.5, 12.5, 0);
- for(var i = 0; i < 12; i ++){
- ul_geom.faces[i].color = black;
- }
- ul_geom.faces[4].color = white;
- ul_geom.faces[5].color = white;
- ul_geom.faces[2].color = blue;
- ul_geom.faces[3].color = blue;
- scene.add(ul);
- //ur
- var ur_geom = new THREE.CubeGeometry(10,10,10);
- ur = new THREE.Mesh(ur_geom, material);
- ur.position.set(12.5, 12.5, 0);
- for(var i = 0; i < 12; i ++){
- ur_geom.faces[i].color = black;
- }
- ur_geom.faces[4].color = white;
- ur_geom.faces[5].color = white;
- ur_geom.faces[0].color = green;
- ur_geom.faces[1].color = green;
- scene.add(ur);
- //ub
- var ub_geom = new THREE.CubeGeometry(10,10,10);
- ub = new THREE.Mesh(ub_geom, material);
- ub.position.set(0, 12.5, -12.5);
- for(var i = 0; i < 12; i ++){
- ub_geom.faces[i].color = black;
- }
- ub_geom.faces[4].color = white;
- ub_geom.faces[5].color = white;
- ub_geom.faces[10].color = orange;
- ub_geom.faces[11].color = orange;
- scene.add(ub);
- //uf
- var uf_geom = new THREE.CubeGeometry(10,10,10);
- uf = new THREE.Mesh(uf_geom, material);
- uf.position.set(0, 12.5, 12.5);
- for(var i = 0; i < 12; i ++){
- uf_geom.faces[i].color = black;
- }
- uf_geom.faces[4].color = white;
- uf_geom.faces[5].color = white;
- uf_geom.faces[8].color = red;
- uf_geom.faces[9].color = red;
- scene.add(uf);
- //fl
- var fl_geom = new THREE.CubeGeometry(10,10,10);
- fl = new THREE.Mesh(fl_geom, material);
- fl.position.set(-12.5, 0, 12.5);
- for(var i = 0; i < 12; i ++){
- fl_geom.faces[i].color = black;
- }
- fl_geom.faces[2].color = blue;
- fl_geom.faces[3].color = blue;
- fl_geom.faces[8].color = red;
- fl_geom.faces[9].color = red;
- scene.add(fl);
- //fr
- var fr_geom = new THREE.CubeGeometry(10,10,10);
- fr = new THREE.Mesh(fr_geom, material);
- fr.position.set(12.5, 0, 12.5);
- for(var i = 0; i < 12; i ++){
- fr_geom.faces[i].color = black;
- }
- fr_geom.faces[0].color = green;
- fr_geom.faces[1].color = green;
- fr_geom.faces[8].color = red;
- fr_geom.faces[9].color = red;
- scene.add(fr);
- //lb
- var lb_geom = new THREE.CubeGeometry(10,10,10);
- lb = new THREE.Mesh(lb_geom, material);
- lb.position.set(-12.5, 0, -12.5);
- for(var i = 0; i < 12; i ++){
- lb_geom.faces[i].color = black;
- }
- lb_geom.faces[2].color = blue;
- lb_geom.faces[3].color = blue;
- lb_geom.faces[10].color = orange;
- lb_geom.faces[11].color = orange;
- scene.add(lb);
- //br
- var br_geom = new THREE.CubeGeometry(10,10,10);
- br = new THREE.Mesh(br_geom, material);
- br.position.set(12.5, 0, -12.5);
- for(var i = 0; i < 12; i ++){
- br_geom.faces[i].color = black;
- }
- br_geom.faces[0].color = green;
- br_geom.faces[1].color = green;
- br_geom.faces[10].color = orange;
- br_geom.faces[11].color = orange;
- scene.add(br);
- // lights
- var light = new THREE.PointLight(0xffffff);
- light.position.set(0, 0, 0);
- camera.add( light );
- // events
- document.addEventListener('mousedown', onDocumentMouseDown, true );
- document.addEventListener('mouseup', onDocumentMouseUp, false );
- document.addEventListener('mousemove', onDocumentMouseMove, false );
- window.addEventListener('resize', onWindowResize, false );
- }
- function onWindowResize() {
- windowHalfX = window.innerWidth / 2;
- windowHalfY = window.innerHeight / 2;
- camera.aspect = window.innerWidth / window.innerHeight;
- camera.updateProjectionMatrix();
- renderer.setSize( window.innerWidth, window.innerHeight );
- }
- function onDocumentMouseDown(event) {
- mouseMotion = 0;
- }
- function onDocumentMouseUp(event) {
- if (mouseMotion >= 3) return;
- var group = new THREE.Object3D();
- var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
- projector.unprojectVector( vector, camera );
- var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
- var intersects = raycaster.intersectObjects( scene.children );
- if ( intersects.length > 0 ) {
- var cubie = intersects[0].object;
- if(cubie.position.x == 0 && cubie.position.y == -12.5 && cubie.position.z == 0){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.y == -12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(0,1,0), Math.PI/2);
- }else if(cubie.position.x == 0 && cubie.position.y == 12.5 && cubie.position.z == 0){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.y == 12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(0,-1,0), Math.PI/2);
- }else if(cubie.position.x == -12.5 && cubie.position.y == 0 && cubie.position.z == 0){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.x == -12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(1,0,0), Math.PI/2);
- }else if(cubie.position.x == 12.5 && cubie.position.y == 0 && cubie.position.z == 0){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.x == 12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(-1,0,0), Math.PI/2);
- }else if(cubie.position.x == 0 && cubie.position.y == 0 && cubie.position.z == -12.5){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.z == -12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(0, 0, 1), Math.PI/2);
- }else if(cubie.position.x == 0 && cubie.position.y == 0 && cubie.position.z == 12.5){
- for(var i = scene.children.length - 1; i >=0; i--){
- var cubie = scene.children[i];
- if(cubie.position.z == 12.5){
- group.add(cubie);
- }
- }
- group.rotateOnAxis(new THREE.Vector3(0,0,-1), Math.PI/2);
- }
- }
- scene.add(group);
- for(var i = group.children.length - 1; i >= 0; i--){
- //scene.add(group.children[i]);
- }
- //scene.remove(group);
- }
- function onDocumentMouseMove(event) {
- mouseMotion += 1;
- mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
- mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
- }
- function animate() {
- requestAnimationFrame(animate);
- if (controls != undefined) controls.update();
- render();
- }
- function render() {
- renderer.render(scene,camera);
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment