LoginSignup
1
0

More than 1 year has passed since last update.

Three.jsを使用する時に苦しんだこと

Posted at

Three.jsを使用して「SCP132jp」を作れるのでは??
という軽い気持ちで手を出したら、そこは毒沼でした・・・
ずぶの素人の備忘録です。

1.どのThree.jsを使うのか

Three.jsは現在下記3種類をダウンロードできます。
・three.js
 通常のthree.js。デバックが容易なので初心者に優しい。
・three.mini.js
 通常のthree.jsよりかなりサイズが小さいので、WEBサイトに公開する際はこっちを使うらしい。
・three.module.js
 ES modulesの規格ライブラリ。mainのJavaScriptファイルから別のJavaScriptファイル(loaderとか)を読み込めるので、HTMLファイルにたくさん記述しなくて便利。記述の際はtype = "module"になるのでちょっと注意。

結論は、作りたいものによる!!ですが
始めたてでジオメトリとかサンプルを作りたい→ three.js
色々理解してきたから、マウスコントロールしたり、外部から3Dファイルを読み込んで作りたい→three.module.js
かなと個人的には思います。

2.ディレクトリを間違えるとエラーが多発

これに関しては所詮 ”おま環” な気がしますが、結構苦しんだのであえて書きます。
現在、HDDがは「C:」「D:」「E:」の三つを使用しています。
 1 容量を気にして「E:」にthree.jsをダウンロード
 2 「D:」で作り始め、「E:」のthree.jsを読み込むよう設定
 3 Chromeブラウザに描画 →CORSオリジンエラー発生

対策
 ディレクトリの階層構造はちゃんと考える!(当たり前)
 あとは、使用していたのがVScodeのLiveSeverだったので、CDN等を利用するのも良いかと思います。

少し違いますが、three.module.jsを使用した際もエラー多発しました。これは、呼び出すJavaScriptファイルに書いてあるthree.module.jsのパスを書きなおせば直ります。

3.カメラ、ライト、ジオメトリー...種類多い

シーン、カメラ、レンダーを用意して、その中にライトや表現したい物体を設置するイメージでコーディングしていきます。各々種類が多いので、よく使うものだけをまとめます。
1 シーン
   様々なオブジェクトをすべて保持するコンテナで、ステージや舞台のイメージです。オプションはそんなにないですが、オブジェクトを設定したらscene.add()で追加しないと描画されないので注意!
2 カメラ
   描画する範囲を設定できる。基本的にはPerspectiveCameraを使用しますが、他にも種類があります。

サンプル
const camera = new THREE.PerspectiveCamera(垂直視野,アスペクト比,開始距離,終了距離);
//引数はすべて数字
camera.position.set(x座標, y座標, z座標);
//カメラの位置を決める
 

3 レンダー
シーンとカメラをブラウザ画面に描画する。

 
4 描画する物体の設定
  ジオメトリ(形状)、マテリアル(材質)を設定してメッシュ化の流れで書いていきます。
  ・ジオメトリ→立方体、球、円錐等様々
  ・マテリアル→メタリックや透明度、色などたくさんのプロパティを設定できます。
  ・メッシュ→ジオメトリとマテリアルをまとめてシーンに追加できるようにする。

サンプル
//ジオメトリ(立方体)
const box = new THREE.BoxGeometry(,高さ,深さ);
//マテリアル
const material = new THREE.MeshBasicMaterial({
 color: "#ffffff",
 metalness:0.5,
 //ここにプロパティを書いていく
});
//メッシュ
const mesh = new THREE.Mesh(box, material);
//設定したジオメトリとマテリアルを入れる

5 ライト
 物体を照らすライト(マテリアル設定では影響しないこともある)。影を落とすことができるものと できないものがあるので注意。
・AmbientLight→基本的なライト。色を設定でき、オブジェクトにもその色が影響する。
・SpotLight→スポットライト。影を落とすことができる。
・PointLight→全方向に光が発散する。影を落とすことはできない。

サンプル
//ライト
const light = new THREE.AmbientLight(  );

4.三角関数、クォータニオンなど数学の地獄

カメラやメッシュのアニメーションを付ける際に必須です!絶対に使います。

それでもThree.jsは面白い

  3Dソフト「Blender」などで作ったモデルをloarderで読み込めば、描画もできるしアニメーションも付けられるし、マテリアルやライト以外にもシェーダーを使えばより多彩な表現ができます!そして、それを作るのはとても楽しいので、触ってみてください。

Three.jsのダウンロードはこちらから

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0