Three.jsを使って作品を作ってみる1
皆さんこんにちは!飯塚LSSの角です!
1Qの試験が差し迫ってきましたね...!皆さん頑張ってください!
今回は最近やりこんでいるThree.jsについて解説・制作をしていこうと思います!
Three.jsとは
Three.jsとは、手軽に3Dコンテンツを制作できる商用利用可能なJavaScriptライブラリです!WebGPUだけで3D表現をするには立方体1つを表示するだけでも多くのコードを書く必要があり、専門知識も必長です。Three.jsを用いると手軽に3Dコンテンツが作成できるため、手軽に扱えるようになります。MMDとかも一応扱えるらしいです。
制作してみた
今回は立方体を描画していこうと思います。まずはCDN(Content Delivery Network)経由でThree.jsをインポートします。
Three.js
//Three.jsを使えるようにする
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.150.1/build/three.module.js';
CDN経由でなくてもいいのですが...npmやnode.jsの知識が必要になってくるのでここでは割愛します。
続いてシーンとカメラを追加しましょう。
Three.js
//シーンを追加
const scene = new THREE.Scene();
//カメラを追加、視野角、アスペクト比、描画開始距離、描画終了距離
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
続いてrendererを追加して...
Three.js
//rendererを追加(カメラで撮影した3Dモデルを画面に表示するためのもの)
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
最後に立方体とアニメーションを追加すればとりあえず完成ですね!
Three.js
//立方体の追加
const cube = new THREE.Mesh(
new THREE.BoxGeometry(),
new THREE.MeshNormalMaterial()
);
scene.add(cube);
//カメラの位置を設定
camera.position.z = 5;
//アニメーションの追加
function animate(){
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
これで一旦完成しましたね! 詳しい解説はまた別の記事でやろうと思います! 皆さんも是非Three.jsを触れてみてください!!
Three.js
//Three.jsを使えるようにする
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.150.1/build/three.module.js';
//シーンを追加
const scene = new THREE.Scene();
//カメラを追加、視野角、アスペクト比、描画開始距離、描画終了距離
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
//rendererを追加(カメラで撮影した3Dモデルを画面に表示するためのもの)
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
//立方体の追加
const cube = new THREE.Mesh(
new THREE.BoxGeometry(),
new THREE.MeshNormalMaterial()
);
scene.add(cube);
//カメラの位置を設定
camera.position.z = 5;
//アニメーションの追加
function animate(){
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
所属