0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

さくっとthree.jsでドーナツを作る

Posted at

概要

ドーナツ好きな皆様のために、three.jsでドーナツを作ります。
three.jsのインストール方法がコチラ

準備するもの

  • MacOS
  • Nodeの最新バージョン
  • VSCode
  • Svelteなど

TorusGeometryを使う

three.jsの公式サイトにトーラスジオメトリが用意されているので、こちらを使います。
前回の立方体のジオメトリを、ドーナツのジオメトリに切り替えます(前回を参照)
newするときのコンストラクタに何も指定しないと、デフォルト値が適用されます。

コンストラクタの引数でデフォルトのサイズ

  • radius(中央からの半径) - 1
  • tube(チューブの半径) — 0.4
  • radioSegments(断面円の分割数) — 12
  • tubularSegments(芯の円の分割数) — 48
  • arc(中心角(ラジアン)) — Math.PI * 2(360°)
App.js
// 立方体のジオメトリ
// const geometry = new THREE.BoxGeometry(1, 1, 1);
// ドーナツのジオメトリ
const geometry = new THREE.TorusGeometry();
const material = new THREE.MeshPhongMaterial({
    color: 0xe9780a // ドーナツカラー
});

// メッシュを作成
const mesh = new THREE.Mesh(geometry, material);
// ドーナツのサイズ分、Y軸を上げる
this.torus.position.set(0, 1.4, 0);

指向性ライトを作る

太陽光と同じような並行な光を当てます。
ポイントライトから指向性ライトに切り替えます。

コンストラクタの引数でデフォルトのサイズ

  • color(色) - 0xffffff
  • intensive(強度) — 1
  • distance(距離) — 0
  • decay(減衰) — 2
App.js
// ポイントライト
// const light = new THREE.PointLight();
// 指向性ライト
const light = new THREE.DirectionalLight(0xffffff, 3);
// 座標(x,y,z)
light.position.set(100, 130, 80);

ガイドを表示する

無空間に設置するとイメージしにくいので、ガイドを表示しておきます。
AxesHelperとGridHelperを作成して、シーンに追加するだけです。
それぞれサイズやマスの数が指定できます。

App.js
// xyz軸表示
const axes = new THREE.AxesHelper(100);
this.scene.add(axes);

// 座標表示
const size = 100;
const divisions = 20;
const gridHelper = new THREE.GridHelper(size, divisions);
this.scene.add(gridHelper);

結果

無事にドーナツが表示されました。
(pageは新しくtorus用に作っています)

ドーナツ1.png

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?