OSDN Git Service

three.jsをThirdPartyに追加
[webglgame/webgl_framework.git] / webglFramework / Thirdparty / three.js-master / examples / webgl_multiple_canvases_circle.html
diff --git a/webglFramework/Thirdparty/three.js-master/examples/webgl_multiple_canvases_circle.html b/webglFramework/Thirdparty/three.js-master/examples/webgl_multiple_canvases_circle.html
new file mode 100644 (file)
index 0000000..2e7c54e
--- /dev/null
@@ -0,0 +1,333 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+       <title>three.js webgl - multiple canvases - circle</title>
+       <meta charset="utf-8">
+       <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+       <style type="text/css" media="screen">
+               body {
+                       background-color: #555;
+                       color: white;
+                       font-family:Monospace;
+                       font-size:13px;
+                       text-align:center;
+                       margin: 0px;
+                       overflow: hidden;
+                       width: 100%;
+                       height: 100%;
+               }
+
+               a {
+                       color: yellow;
+               }
+
+               #container {
+                       width: 100%;
+                       height: 700px;
+                       -webkit-perspective: 800px;
+                       -webkit-perspective-origin: 50% 225px;
+                       -moz-perspective: 800px;
+                       -moz-perspective-origin: 50% 225px;
+                       perspective: 800px;
+                       perspective-origin: 50% 225px;
+               }
+
+               #stage {
+                       width: 100%;
+                       height: 100%;
+                       -webkit-transform-style: preserve-3d;
+                       -moz-transform-style: preserve-3d;
+                       transform-style: preserve-3d;
+               }
+
+               #shape {
+                       position: relative;
+                       top: 160px;
+                       margin: 0 auto;
+                       height: 200px;
+                       width: 200px;
+                       -webkit-transform: translateZ(-0px);
+                       -webkit-transform-style: preserve-3d;
+                       -moz-transform: translateZ(-0px);
+                       -moz-transform-style: preserve-3d;
+                       transform: translateZ(-0px);
+                       transform-style: preserve-3d;
+               }
+
+               .ring {
+                       position: absolute;
+                       display: block;
+                       height: 300px;
+                       width: 200px;
+                       text-align: center;
+                       font-family: Times, serif;
+                       font-size: 124pt;
+                       color: black;
+                       background-color: #fff;
+               }
+
+               #shape {
+                       border: 0px;
+                       background-color: rgba(255, 255, 255, 0);
+               }
+
+               .ring > .r1 {
+                       -webkit-transform: rotateY(300deg) translateZ(-380px);
+                       -moz-transform: rotateY(300deg) translateZ(-380px);
+                       transform: rotateY(300deg) translateZ(-380px);
+               }
+
+               .ring > .r2 {
+                       -webkit-transform: rotateY(330deg) translateZ(-380px);
+                       -moz-transform: rotateY(330deg) translateZ(-380px);
+                       transform: rotateY(330deg) translateZ(-380px);
+               }
+
+               .ring > .r3 {
+                       -webkit-transform: rotateY(0deg) translateZ(-380px);
+                       -moz-transform: rotateY(0deg) translateZ(-380px);
+                       transform: rotateY(0deg) translateZ(-380px);
+               }
+
+               .ring > .r4 {
+                       -webkit-transform: rotateY(30deg) translateZ(-380px);
+                       -moz-transform: rotateY(30deg) translateZ(-380px);
+                       transform: rotateY(30deg) translateZ(-380px);
+               }
+
+               .ring > .r5 {
+                       -webkit-transform: rotateY(60deg) translateZ(-380px);
+                       -moz-transform: rotateY(60deg) translateZ(-380px);
+                       transform: rotateY(60deg) translateZ(-380px);
+               }
+
+               #info {
+                               position: absolute;
+                               top: 0px; width: 100%;
+                               padding: 5px;
+               }
+
+               #help {
+                               position: absolute;
+                               top: 50px; width: 100%;
+                               text-align: center;
+               }
+               #help>div {
+                               margin: auto;
+                               padding: 1em;
+                               background-color: rgba(0,0,0,0.3);
+                               width: 50%;
+               }
+
+       </style>
+</head>
+<body>
+
+       <div id="container">
+               <div id="stage">
+                       <div id="shape" class="ring backfaces">
+                               <canvas id="canvas1" class="ring r1"></canvas>
+                               <canvas id="canvas2" class="ring r2"></canvas>
+                               <canvas id="canvas3" class="ring r3"></canvas>
+                               <canvas id="canvas4" class="ring r4"></canvas>
+                               <canvas id="canvas5" class="ring r5"></canvas>
+                       </div>
+               </div>
+       </div>
+
+       <div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - multiple canvases - circle</div>
+       <div id="help" gstyle="display: none">
+               <div>
+               This example is shows how to setup multi-monitor displays like <a href="https://www.google.com/earth/explore/showcase/liquidgalaxy.html">Google's Liquid Galaxy</a>.
+               Here 5 monitors are simulated using 3d css. WebGL is then rendered onto each one.
+               </div>
+       </div>
+
+               <script type="text/javascript" src="../build/three.js"></script>
+
+               <script type="text/javascript" src="js/Detector.js"></script>
+
+               <script type="text/javascript">
+
+                       if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
+
+                       var views = [];
+
+                       var scene, renderer;
+
+                       var mouseX = 0, mouseY = 0;
+
+                       var windowHalfX = window.innerWidth / 2;
+                       var windowHalfY = window.innerHeight / 2;
+
+                       init();
+                       animate();
+
+                       //
+
+                       function View( canvas, rotateY ) {
+
+                               canvas.width = canvas.clientWidth * window.devicePixelRatio;
+                               canvas.height = canvas.clientHeight * window.devicePixelRatio;
+
+                               var context = canvas.getContext( '2d' );
+
+                               var camera = new THREE.PerspectiveCamera( 20, canvas.clientWidth / canvas.clientHeight, 1, 20000 );
+                               camera.rotation.y = rotateY;
+
+                               // Think of the virtual camera as a post with 5 cameras on it (even though those cameras happen to live in difference scenes)
+                               // You need to move the post (ie, the virtualCamera) to move all 5 cameras together.
+
+                               var virtualCamera = new THREE.Camera();
+                               virtualCamera.add( camera );
+
+                               this.render = function () {
+
+                                       virtualCamera.position.x = - mouseX * 4;
+                                       virtualCamera.position.y = - mouseY * 4;
+                                       virtualCamera.position.z = 1800;
+
+                                       virtualCamera.lookAt( scene.position );
+                                       virtualCamera.updateMatrixWorld( true );
+
+                                       renderer.render( scene, camera );
+
+                                       context.drawImage( renderer.domElement, 0, 0 );
+
+                               };
+
+                       }
+
+                       function init() {
+
+                               var canvas1 = document.getElementById( 'canvas1' );
+                               var canvas2 = document.getElementById( 'canvas2' );
+                               var canvas3 = document.getElementById( 'canvas3' );
+                               var canvas4 = document.getElementById( 'canvas4' );
+                               var canvas5 = document.getElementById( 'canvas5' );
+
+                               var fudge = 0.45; // I don't know why this is needed :-(
+                               var rot = 30 * THREE.Math.DEG2RAD;
+
+                               views.push( new View( canvas1, rot * -2 * fudge ) );
+                               views.push( new View( canvas2, rot * -1 * fudge ) );
+                               views.push( new View( canvas3, rot *    0 * fudge ) );
+                               views.push( new View( canvas4, rot *    1 * fudge ) );
+                               views.push( new View( canvas5, rot *    2 * fudge ) );
+
+                               //
+
+                               scene = new THREE.Scene();
+                               scene.background = new THREE.Color( 0xffffff );
+
+                               var light = new THREE.DirectionalLight( 0xffffff );
+                               light.position.set( 0, 0, 1 ).normalize();
+                               scene.add( light );
+
+                               var noof_balls = 51;
+
+                               // shadow
+
+                               var canvas = document.createElement( 'canvas' );
+                               canvas.width = 128;
+                               canvas.height = 128;
+
+                               var context = canvas.getContext( '2d' );
+                               var gradient = context.createRadialGradient( canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2 );
+                               gradient.addColorStop( 0.1, 'rgba(210,210,210,1)' );
+                               gradient.addColorStop( 1, 'rgba(255,255,255,1)' );
+
+                               context.fillStyle = gradient;
+                               context.fillRect( 0, 0, canvas.width, canvas.height );
+
+                               var shadowTexture = new THREE.CanvasTexture( canvas );
+
+                               var shadowMaterial = new THREE.MeshBasicMaterial( { map: shadowTexture } );
+                               var shadowGeo = new THREE.PlaneBufferGeometry( 300, 300, 1, 1 );
+
+                               for ( var i = 0; i < noof_balls; i ++ ) { // create shadows
+
+                                       var mesh = new THREE.Mesh( shadowGeo, shadowMaterial );
+                                       mesh.position.x = - ( noof_balls - 1 ) / 2 *400 + i * 400;
+                                       mesh.position.y = - 250;
+                                       mesh.rotation.x = - Math.PI / 2;
+                                       scene.add( mesh );
+
+                               }
+
+                               var faceIndices = [ 'a', 'b', 'c' ];
+
+                               var radius = 200,
+
+                               geometry1 = new THREE.IcosahedronGeometry( radius, 1 );
+
+                               for ( var i = 0; i < geometry1.faces.length; i ++ ) {
+
+                                       var f1 = geometry1.faces[ i ];
+
+                                       for( var j = 0; j < 3; j ++ ) {
+
+                                               var vertexIndex = f1[ faceIndices[ j ] ];
+
+                                               var p = geometry1.vertices[ vertexIndex ];
+
+                                               var color = new THREE.Color( 0xffffff );
+                                               color.setHSL( ( p.y / radius + 1 ) / 2, 1.0, 0.5 );
+
+                                               f1.vertexColors[ j ] = color;
+
+                                               var color = new THREE.Color( 0xffffff );
+                                               color.setHSL( 0.0, ( p.y / radius + 1 ) / 2, 0.5 );
+
+                                       }
+
+                               }
+
+
+                               var materials = [
+
+                                       new THREE.MeshPhongMaterial( { color: 0xffffff, flatShading: true, vertexColors: THREE.VertexColors, shininess: 0 } ),
+                                       new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, transparent: true } )
+
+                               ];
+
+                               for ( var i = 0; i < noof_balls; i ++ ) { // create balls
+
+                                       var mesh = THREE.SceneUtils.createMultiMaterialObject( geometry1, materials );
+
+                                       mesh.position.x = - ( noof_balls - 1 ) / 2 *400 + i *400;
+                                       mesh.rotation.x = i * 0.5;
+                                       scene.add( mesh );
+
+                               }
+
+                               renderer = new THREE.WebGLRenderer( { antialias: true } );
+                               renderer.setPixelRatio( window.devicePixelRatio );
+                               renderer.setSize( 200, 300 );
+
+                               document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+
+                       }
+
+                       function onDocumentMouseMove ( event ) {
+
+                               mouseX = event.clientX - windowHalfX;
+                               mouseY = event.clientY - windowHalfY;
+
+                       }
+
+                       function animate() {
+
+                               for ( var i = 0; i < views.length; ++ i ) {
+
+                                       views[ i ].render();
+
+                               }
+
+                               requestAnimationFrame( animate );
+
+                       }
+
+               </script>
+</body>
+</html>