<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name = "viewport" content = "width=device-width, initial-scale = 1.0"> <title>テスト</title> <style> #canvas { display: block; margin-bottom: 10px; } </style> </head> <body> <canvas id="canvas"></canvas> <script type="module"> import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.167.0/build/three.module.js"; // サイズを指定 const width = 360; const height = 360; // レンダラー,シーン,カメラを作成 const renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('canvas'), }); const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(45, width / height); window.onload = () => { renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(width, height); camera.position.set(0, 0, 150); addObjects(); const INTERVAL = 1000 / 60; let nextUpdateTime = new Date().getTime() + INTERVAL; frameProc(); function frameProc(){ const curTime = new Date().getTime(); if(nextUpdateTime < curTime){ nextUpdateTime += INTERVAL; update(); } requestAnimationFrame(() => frameProc()); } } let plane; function addObjects(){ plane = createPlane(); scene.add(plane); // MeshStandardMaterialを使用するのでライトが必要 const light = new THREE.AmbientLight(0xFFFFFF, 2.0); scene.add(light); } function createPlane(){ const texture = new THREE.TextureLoader().load('./images/star.png'); texture.colorSpace = THREE.SRGBColorSpace; const material = new THREE.MeshStandardMaterial({ map: texture, transparent: true, side: THREE.DoubleSide }); const geometry = new THREE.PlaneGeometry(100, 100); return new THREE.Mesh(geometry, material); } // 更新処理 function update() { plane.rotation.x += 0.04; renderer.render(scene, camera); } </script> </body> </html>