今回は画像を平面に貼りつけてみたり、球に貼りつけてみたりして遊ぶ。
まずは貼り付ける画像として、下記のようなベニヤ板風なJPEGファイルを用意した。
これを平面の板に貼ってみる。
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <script src="three.min.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script> $(document).ready( function() { // Rendererを用意 var renderer = new THREE.WebGLRenderer( { 'canvas' : $('#canvas')[0] } ); // Cameraを用意 var camera = new THREE.PerspectiveCamera(); camera.position.z = 500; // 画像を指定したmaterialの用意 var material = new THREE.MeshBasicMaterial( { map:THREE.ImageUtils.loadTexture('ita.jpg', {}, function() {renderer.render(scene, camera);}) } ); // Cubeの用意 var geometry = new THREE.PlaneGeometry(200, 200); var mesh = new THREE.Mesh( geometry, material ); // Sceneを用意 var scene = new THREE.Scene(); scene.add( mesh ); // render renderer.render( scene, camera ); } ); </script> </head> <body> <canvas id="canvas" style="width:300px; height: 300px; border:solid 1px; margin: 30px;"> お使いのブラウザは旧石器時代に開発されたものかテキストベースのもののようです。現代の一般的なブラウザを用いて表示してください。 </canvas> </body> </html>
下記のような表示になる。loadTextureメソッドの中で、renderをやり直す処理を実行している。こうしておかないと画像がloadされる前に描画が行われて画像が表示されなかった。定期的に再描画されるように処理してあればいらないけど。
少しrotateを回して斜めから見てみる。
var mesh = new THREE.Mesh( geometry, material ); mesh.rotation.x = 0.5; mesh.rotation.y = 0.5;
立方体のそれぞれの面に同じ画像を貼ってみる。
// Rendererを用意 var renderer = new THREE.WebGLRenderer( { 'canvas' : $('#canvas')[0] } ); // Cameraを用意 var camera = new THREE.PerspectiveCamera(); camera.position.z = 500; // 画像を指定したmaterialの用意 var material = new THREE.MeshBasicMaterial( { map:THREE.ImageUtils.loadTexture('ita.jpg', {}, function() {renderer.render(scene, camera);}) } ); // Cubeの用意 var geometry = new THREE.CubeGeometry(200, 200, 200); var mesh = new THREE.Mesh( geometry, material ); mesh.rotation.x = 0.7; mesh.rotation.y = -0.7; // Sceneを用意 var scene = new THREE.Scene(); scene.add( mesh ); // render renderer.render( scene, camera );
6つの面をそれぞれ別の画像にすることもできる。試しにそれぞれ色を変えた6枚の画像を用意して貼ってみる。画像の名前はita1.jpg〜ita6.jpgとする。
// 画像を6枚用意 var images = []; for( var i = 0; i < 6; i++ ) { images[i] = new THREE.MeshBasicMaterial( { map:THREE.ImageUtils.loadTexture('ita' + (i + 1) + '.jpg', {}, function() {renderer.render(scene, camera);}) } ); } // Cubeの用意(用意した6枚の画像おw設定) var geometry = new THREE.CubeGeometry(200, 200, 200); var material = new THREE.MeshFaceMaterial( images ); var mesh = new THREE.Mesh( geometry, material ); mesh.rotation.x = 0.5; mesh.rotation.y = 0.5;
球に画像を貼ると、いい感じにぐにゃりと歪んで
// 画像を指定したmaterialの用意 var material = new THREE.MeshBasicMaterial( { map:THREE.ImageUtils.loadTexture('ita.jpg', {}, function() {renderer.render(scene, camera);}) } ); // Sphereの用意(用意した6枚の画像おw設定) var geometry = new THREE.SphereGeometry(200); var mesh = new THREE.Mesh( geometry, material ); mesh.rotation.y = -1.5;
下記のような(やる気のない)顔を展開したような画像を配置してみる。
// 画像を指定したmaterialの用意 var material = new THREE.MeshBasicMaterial( { map:THREE.ImageUtils.loadTexture('kao.jpg', {}, function() {renderer.render(scene, camera);}) } ); // Sphereの用意(用意した6枚の画像おw設定) var geometry = new THREE.SphereGeometry(200); var mesh = new THREE.Mesh( geometry, material ); mesh.rotation.x = 0.4; mesh.rotation.y = -1.5;
顔らしき物体が表示された。