プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • JavaScript
  • 【Three.js】基本
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Three.js】基本

04.04

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

Three.jsとは?

threeとは3Dの3を英語にしたものです。WebGLの技術を使ってWebブラウザ上で3D表現をすることが可能です。

リリースノート

バージョン リリース年月 備考
83 2016/12 WebGL2対応が始まった。
100 2019/1 WebGL2の一部の機能のみサポートしている。
134 2021/10
137 2022/1
140 2022/5

WebGLとの違いは?

通常のWebGLだと例えば立方体一つ表現するだけでも多くのJavaScriptコードや、GLSLコードを書く必要があり専門知識が必要になります。Three.jsを使うことによってJavaScriptの知識だけでWebGLの実装をすることが可能になります。

Three.jsは何ができるのか?

マウスのドラッグ&ドロップで色々3Dを動かすことが可能です。

具体例

Zenly

クルクル地球を回せます。

マインクラフト

これも使われています。

基礎

シーン(Scene)

表現するために必要な場所のことです。要はブラウザのことです。

シーンを追加する

1
const scene = new THREE.Scene();

カメラ(Camera)

シーンをカメラで撮ったり写すことです。

PerspectiveCamera(視野角、アスペクト比、開始距離、終了距離)

大体はこれが使われる。

視野角

カメラのどこからどこまでを写すのか。

アスペクト比

画面の横幅と縦幅の比率のこと。

開始距離、終了距離

カメラが実際に写す距離

1
2
3
4
5
6
const camera = new THREE.PerspectiveCamera(
    50,
    window.innerWidth / window.innerHeight,
    0.1,
    1000
);

レンダラー(Renderer)

カメラで撮影したものをブラウザに写せるように変換してくれるもの。ブラウザに写すための変換器。

WebGL Renderer

three.jsで一般的に使われるレンダラー。

1
2
3
// レンダラーを追加
const renderer = new THREE.WebGL1Renderer();
document.body.appendChild(renderer.domElement);

ジオメトリー

形状の骨格を表す。

  • 球体
  • 立方体
  • ドーナツ型の3Dオブジェクト

調べ方

ジオメトリーにはたくさんの種類があります。

three.jsの公式サイトで「geometry」と検索すればいろんなgeometryが出てきます。

種類

BoxGeometry

直方体

実装

1
const geometry = new THREE.SphereGeometry(球体の半径,ワイドセグメント(球体に近づけるか),ハイトセグメント(球体に近づけるか));

マテリアル(質感)

色など。

MeshPhongMaterial

フォン・シェーディングと言う、光沢感のある質感を表現できるマテリアル

MeshPhysicalMaterial

金属感を表現できる。

MeshBasicMaterial

影がつかず均一な質感になる。

テクスチャー

質感に画像を追加したい場合は以下のように実装することで対応が可能です。

1
2
3
4
// テクスチャーを追加
const texture = new THREE.TextureLoader().load("./textures/earth.jpg");
// マテリアルを作成
const material = new THREE.MeshPhysicalMaterial({map:texture});

MeshPhysicalMaterial

金属製をつけることができる。

1
const material = new THREE.MeshPhysicalMaterial({color: "#000"});

メッシュ化

ジオメトリー(骨格)とマテリアル(色)を組み合わせたもの。

1
2
3
4
// メッシュの作成
const mesh = new THREE.Mesh(geometry,material);
// シーンにメッシュを追加
scene.add(mesh);

平行光源を追加

上のサンプルだと球体が暗いままになってしまっています。なので、以下の処理を追加することで光を当てます。

1
2
3
4
// 平行光源を追加
const directionalLight = new THREE.DirectionalLight(0xffffff,2);
// シーンに平行光源を追加
scene.add(directionalLight);

ポイント光源を追加

1
2
3
4
5
// ポイント光源を追加
const pointLight = new THREE.PointLight(0xffffff,1);
pointLight.position.set(200,200,200);
// シーンにポイント光源を追加
scene.add(pointLight);

ポイント光源の場所

1
2
3
// ポイント光源がどこにあるか
const pointLightHelper = new THREE.PointLightHelper(pointLight,100);
scene.add(pointLightHelper);

マウス操作ができるようにする。(カメラコントローラー)

マウスで球体を回転、ホイール操作で遠近操作ができる。

コントローラの作成

1
2
// カメラコントローラーを作成
const controls = new THREE.OrbitControls(camera, canvasElement);

コントローラの制御

デフォルトだと機械的な動きですが、これらのプロパティを設定することで滑らかに動くようになります。

1
2
3
// 滑らかにカメラコントローラーを制御する
controls.enableDamping = true;
controls.dampingFactor = 0.2;

OrbitControls

Three.jsのライブラリ本体には含まれていないので、Three.jsとは別途読み込む必要があります。

座標軸

X軸

赤い線、横

Y軸

緑の線、縦

Z軸

青い線、奥行き

スポンサーリンク
  • 2022 04.04
  • miyabisan2
  • コメントを書く
  • JavaScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.12

    【JavaScript】「コールバック関数」や、「コールバック地獄」について

  2. 2020 06.12

    【JavaScript】「jest」、モック化など

  3. 2018 06.20

    【jQuery】「Ajax」、「jQuery Deferred」による「非同期通信」

  4. 2020 02.29

    【webpack】設定の基本や「loader(ローダー)」について

  5. 2021 08.16

    【JavaScript】「import」と「require」の違い

  6. 2020 05.09

    【JavaScript】配列の便利メソッド「forEach」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【オブジェクト指向】「リスコフの置換原則」について

【WebGL】「カクつく」問題、gtlf

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー