![見出し画像](https://assets.st-note.com/production/uploads/images/26839196/rectangle_large_type_2_300285ab01be82a70c90f7e700c475c9.png?width=1200)
【three.js】マリオワールドを再現してみました
趣味のモデリングを生かしてweb上にマリオワールドを再現してみました
DEMO
使用したプラグイン
three.js
OrbitControls.js
TDSLoader.js
初めて自分で作成したモデルを読み込んで作成できたものなので
動かすことができて純粋に嬉しかった作品
手順を簡単に
1、ライノセラスでパーツごとのモデリングを作成
2、three.jsでパーツを読み込み、配置
3、htmlでcanvas使用して表示する
コード
プラグインの読み込み
<script src="three.js"></script>
<script src="OrbitControls.js"></script>
<script src="TDSLoader.js"></script>
html
<body>
<canvas id="myCanvas"></canvas>
</body>
js
window.addEventListener('load', init);
function init(){
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector('#myCanvas')
});
renderer.setPixelRatio(window.devicePixelRatio);
// 背景
renderer.setClearColor(0X7AA0FF);
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, 1.0);
camera.position.set(0, -300, 100);
const controls = new THREE.OrbitControls(camera);
const directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(1, 1, 1);
scene.add(directionalLight);
const ambientLight = new THREE.AmbientLight(0xffffff);
scene.add(ambientLight);
const loader = new THREE.TDSLoader();
//mario.3dsの読み込み
const mario = 'source/mario.3ds';
loader.load(mario, function(object){
objmodel = object.clone();
objmodel.scale.set(1,1,1);//縮尺の初期化
objmodel.rotation.set(0,0,135);//角度の初期化
objmodel.position.set(-100,0,0);//位置の初期化
scene.add(objmodel);
});
//block.3dsの読み込み
const block = 'source/block.3ds';
loader.load(block, function(object4){
objmodel = object4.clone();
objmodel.scale.set(1,1,1);//縮尺の初期化
objmodel.rotation.set(0,0,0);//角度の初期化
objmodel.position.set(-40,0,60);//位置の初期化
scene.add(objmodel);
});
tick();
// 毎フレーム時に実行されるループイベント
function tick() {
// レンダリング
renderer.render(scene, camera);
requestAnimationFrame(tick);
}
// 初期化のために実行
onResize();
// リサイズイベント発生時に実行
window.addEventListener('resize', onResize);
function onResize() {
// サイズを取得
const width = window.innerWidth;
const height = window.innerHeight;
// レンダラーのサイズを調整する
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(width, height);
// カメラのアスペクト比を正す
camera.aspect = width / height;
camera.updateProjectionMatrix();
}
}
これで実装完了
DEMO