引き続きちょこちょことThree.jsをいじってみたので、忘れないうちに記録。やってることは結構単純。たくさんの立方体をちょっとづつ角度をづらして回しているだけ。色も複数のスポットライトをつくって照らしている。
======================================
→ Three.js たくさんのオブジェクトを動かす
======================================
繰り返し部分は以下のような処理をしています。
var NUM = 200; // 生成するcubeの数
var cube = [];
// 中略
// cubeの生成
for(var i = 0; i < NUM; i++) {
cube[i] = new THREE.Mesh( geometry, material);
cube[i].castShadow = true;
cube[i].rotation.x = i / 10*Math.PI;
cube[i].rotation.y = i / 10*Math.PI;
scene.add(cube[i]);
}
// 中略
// 繰り返しのアニメーション設定
function animate () {
// 繰り返す
for(var i = 0; i < NUM; i++) {
cube[i].rotation.y += i / 25000 * Math.PI;
cube[i].rotation.x += i / 25000 * Math.PI;
cube[i].scale.x = 0.3 * Math.sin( Date.now() / 2000) + 1;
cube[i].scale.y = 0.3 * Math.sin( Date.now() / 2000) + 1;
cube[i].rotation.y += 0.005;
}
requestAnimationFrame(animate);
render();
}
生成したcubeをそれぞれX軸、Y軸にちょっとづつ角度をづらしながら回転させ、拡大縮小しています。試した結果、環境にもよるだろうけど、オブジェクトの数が5000ぐらいまでなら割とスムーズに動いた。10000超えると流石にもたつく。ちなみに以下のものが[NUM = 3000]にしたもの。これはこれでグリッチっぽくてかっこいいかなと思う。
======================================
→ Three.js たくさんのオブジェクトを動かす [NUM = 3000]
======================================
色については[new THREE.PointLight]を複数、今回は10個、オブジェクトのまわりに設置して色をつけています。結構な力技。
背景透過の方法でちょっと詰まったのでメモ。かなり分かりづらいけど背景を透過にして画像(夜の海の写真)を敷いています。背景画像はbodyタグに設定。
background: url(img/blue_sea.jpg) center center / cover no-repeat fixed;
背景を透過させるに際して、[renderer.setClearColor(0x000000, 0);]だけではダメで、new THREE.WebGLRenderer( {alpha: true} )も併せて設定しなければ透過しなかった。setClearColor(0x000000, 0)の色の指定も[0x000000]でなければダメで、例えば[0xffffff]とかだと透過しなかった。
======================================
→ Three.js たくさんのオブジェクトを動かす
======================================