回る地球を表示(JavaScript+Three.js)

Spinning the earth by threejs. JavaScript

JavaScriptの3D表示に興味がありまして、まずは簡単にThree.js入門サイトに例題がありました回転する地球を表示してみました。

ついでに回転する立方体を表示したところ、少々不気味な雰囲気になってしまいました(^^;。

The earth is always spinning.

下記ソースはローカルマシンで、VScodeのLive Serverでデバッグしてたものですので、サーバーでの公開の際は、サーバー環境に合わせて一部変更する必要あります。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <!-- load test_th.js -->
        <script type="module" src="test_th.js"></script>
    </head>
    <body>
        <h1>The earth is always spinning.</h1>
        <canvas id="myCanvas"></canvas>
    </body>
</html>    

上記HTMLの<script>タグでは、type=”module”になっていることが注意です。
下記のJavaScriptファイル”test_th.js”では、ファイル1行目でThree.jsをimportしており、type=”module”属性にしなければimportできないためです。

上記HTML 10行目の<canvas>タグで設定したid=”myCanvas”に対して、下記JavaScriptで3D画像を生成し表示します。

import * as THREE from "./three.module.js";

function main() {
    const width = 960;
    const height = 540;

    // make Renderer
    const renderer = new THREE.WebGLRenderer({
        canvas: document.querySelector("#myCanvas")
    });
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(width, height);

    // make Scene
    const scene = new THREE.Scene();

    // make Camera
    const camera = new THREE.PerspectiveCamera(
        45,
        width / height,
        1,
        10000
    );
    camera.position.set(0, 0, +1000);

    // make BOX
    const geometry = new THREE.BoxGeometry(200, 200, 200);
    const material = new THREE.MeshStandardMaterial({
        color: 0x0000ff
    });
    const box = new THREE.Mesh(geometry, material);
    scene.add(box);

    // make BALL
    const geometry2 = new THREE.SphereGeometry(200, 30, 30);
    // Read texture
    const loader = new THREE.TextureLoader();
    const texture = loader.load("imgs/earthmap1k.jpg");
    const material3 = new THREE.MeshStandardMaterial({
            map: texture
    });
    const ball = new THREE.Mesh(geometry2, material3);
    scene.add(ball);

    // Derection of Light
    const directionalLight = new THREE.DirectionalLight(
        0xffffff
    );
    directionalLight.position.set(1, 1, 1);
    // add to Scene
    scene.add(directionalLight);

    // Ambient of Light  (Parameter: color, strength of light)
    const ambientLight = new THREE.AmbientLight(0x008888, 0.8);
    scene.add(ambientLight);

    tick();

    function tick() {
        requestAnimationFrame(tick);

        // Rotate Box
        box.rotation.x += 0.01;
        box.rotation.y += 0.01;

        // move
        box.position.x += 0.1;
        box.position.y -= 0.01;
    
        // Rotate Ball
        ball.rotation.y += 0.01;

        // move
        ball.position.x -= 0.1;

        // renderering
        renderer.render(scene, camera);
    }
}

main();

このJavaScriptは球体と立方体を生成し、それぞれを回転させて表示しています。球体にはフリーの地球表面画像をテクスチャとして貼り付けて、地球っぽくしています。
また、カメラ位置や照明位置の設定もしています。
Three.jsを利用すると、3D表示がお手軽にできそうです。

上記ソースをこのサイト(WordPressで作成している)で表示できるように修正しています。ちゃんと地球が回って見えますでしょうか?

 

コメント

タイトルとURLをコピーしました