Three.js(r79)で鏡に映るオブジェクトのシーンをつくってみたかったので調べたところ、鏡オブジェクトを作成できるらしい。そこで、球体の左右に鏡を配置して、球をたくさん表示させてみる。
以下のようなシーンを作成する。
Three.jsのライブラリファイルを解凍し、\examples\js\Mirror.jsを適当なフォルダにコピーする(ここではjs_r79)。それをhtmlから読み込む
球体を作成する。
THREE.Mirrorインスタンスを作成し、そのmaterialをミラーオブジェクトのマテリアルとして指定する。
ミラー用のレンダリングを追加する。
以下のようなシーンを作成する。

1.Mirror.jsの読み込み
Three.jsのライブラリファイルを解凍し、\examples\js\Mirror.jsを適当なフォルダにコピーする(ここではjs_r79)。それをhtmlから読み込む
2.球体の作成
球体を作成する。
// 球体の作成
var geometry = new THREE.SphereGeometry( 5, 32, 16 );
// テクスチャ画像の読み込み
var texture = new THREE.TextureLoader().load( '../image/sunflower_er.jpg' );
// マテリアルの作成
var material = new THREE.MeshPhongMaterial( { map: texture, color: 0xffffff } );
// 球体の作成
var mesh = new THREE.Mesh( geometry, material );
// 球体をシーンに追加
scene.add( mesh );
3.ミラーの作成
THREE.Mirrorインスタンスを作成し、そのmaterialをミラーオブジェクトのマテリアルとして指定する。
var width = window.innerWidth;
var height = window.innerHeight;
// ミラーのジオメトリ作成
var plane = new THREE.PlaneBufferGeometry( 100, 100 );
// 左ミラーの作成
var leftMirror = new THREE.Mirror( renderer, camera, { clipBias: 0.003, textureWidth: width, textureHeight: height, color: 0x777777 } );
var leftMirrorMesh = new THREE.Mesh( plane, leftMirror.material );
leftMirrorMesh.add( leftMirror );
// 左ミラーの位置調整
leftMirrorMesh.rotateY( Math.PI / 2 );
leftMirrorMesh.position.x = -10;
// 左ミラーをシーンへ追加
scene.add( leftMirrorMesh );
// 右ミラーの作成
var rightMirror = new THREE.Mirror( renderer, camera, { clipBias: 0.003, textureWidth: width, textureHeight: height, color: 0x777777 } );
var rightMirrorMesh = new THREE.Mesh( plane, rightMirror.material );
rightMirrorMesh.add( rightMirror );
// 右ミラーの位置調整
rightMirrorMesh.rotateY( -Math.PI / 2 );
rightMirrorMesh.position.x = 10;
// 右ミラーをシーンへ追加
scene.add( rightMirrorMesh );
4.ミラーのレンダリング
ミラー用のレンダリングを追加する。
function render(){
requestAnimationFrame( render );
// レンダリング
renderer.render( scene, camera );
// ミラー用レンダリング
leftMirror.renderWithMirror( rightMirror );
rightMirror.renderWithMirror( leftMirror );
}
render();
0 件のコメント:
コメントを投稿