ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Three.jsをTypeScriptと組み合わせて学んでみた

ブラウザ側のJavaScriptGPUに命令して3Dを表示できるThree.js というライブラリがあります。
Three.js – JavaScript 3D Library

このThree.jsをTypeScriptで動かしながら、いくつかのサイトを写経してみました。
今回はその時に参考にしたサイトと、JavaScriptで書かれているThree.jsの記事をTypeScriptのプロジェクトで書き直した時のメモを上げておきたいと思います。

Three.js + TypeScriptの環境について

環境については以下のサイトを参考にし、Three.js + TypeScrpt + Webpackという組み合わせとしました。
最新版TypeScript+webpack 5の環境構築まとめ(React, Vue.js, Three.jsのサンプル付き) - ICS MEDIA

Three.jsについて

以下のサイトをTypeScriptに変換しつつ写経しました。

Three.js入門サイト - ICS MEDIA
three.js超入門 第0回 3Dコンピュータグラフィックスの基礎 - Qiita

また他の例などが知りたければ、以下の公式サイトのサンプルを参考になりました。

https://threejs.org/examples/#webgl_geometry_convex

いくつか出たエラーについて

Access to image at 'xxx.jpg' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

CORSエラーですね。とりあえずローカルで簡易的なWebサーバを動かせばよかったので、今回は「goexec」を使いました。
Golangの開発環境がある場合ですが

go get -u github.com/shurcooL/goexec

で「goexec」をインストールし、以下のコマンドを開きたいHTMLファイルがあるフォルダで実行してWebサーバを起動しました。

$GOPATH/bin/goexec 'http.ListenAndServe(":8080", http.FileServer(http.Dir(".")))'

Three.jsのバージョン

Three.jsのバージョンを最新ではなく任意のバージョンにしたい場合などがあります。
以下のコマンドでnpmでインストール可能なバージョンを確認し、package.jsonに記述しました。

npm info three versions

Three.jsの参照

Webpackで必要なモジュールを纏めているので、ビルド前の.htmlファイルからはライブラリの参照の記述を削除しました。

OrbitControls

TypeScript用の型定義である@types がないOrbitControlsのモジュールを直接読み込むため以下を行いました。

npm install --save three-orbitcontrols

でインストールし、以下をmain.tsに記述します。

declare function require(x: string): any;
const OrbitControls = require('three-orbitcontrols');


以上です。次にまた自分がThree.jsを始めるためのメモとして残しておきます。