three.js เป็น js library สำหรับทำ 3D บนเว็บไซต์ บทความนี้จะนำเอาความสารถของ library ตัวนี้มาใช้กันครับ
ตัวอย่างครับ
ส่วนที่แสดงผลจะเป็น canvas ซึ่งใช้ three.js สร้างขี้นมาครับ
1 สร้าง object ที่เป็นวงกลม โลก + เมฆ
2 ใส่พื้นผิวให้กับ object ที่สร้างขี้น(คือรูปแผนที่โลก น้ำทะเล เป็นต้น)
3 ใส่ camera หรือมุมมองซึ่งก็จะมีหลายแบบสามารถไปดูได้ที่เว็บไซต์ https://threejs.org/docs/#api/cameras/Camera
4 ใส่แสง
5 ใส่ event control
ส่วน CODE ของ js ซึ่งผมจะ comment ให้ในส่วนต่างๆครับ
<script> (function () { var worldgl = document.getElementById('world'); // เก็บ object ในตัวแปล if (!Detector.webgl) { Detector.addGetWebGLMessage(worldgl); return; } var width = window.innerWidth, height = window.innerHeight; // กำหนดความกว้างสูงเท่ากับหน้าจอเว็บ // Earth params var radius = 0.5,segments = 32,rotation = 6; var scene = new THREE.Scene(); // สร้าง camera ใส่อัตราส่วนและมุมมอง var camera = new THREE.PerspectiveCamera(45, width / height, 0.01, 1000); camera.position.z = 1.5; var renderer = new THREE.WebGLRenderer(); renderer.setSize(width, height); scene.add(new THREE.AmbientLight(0x333333)); // สร้างแสงและกำหนดตำแหน่ง var light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(5,3,5); scene.add(light); // สร้าง object โลก var sphere = createSphere(radius, segments); sphere.rotation.y = rotation; scene.add(sphere) // สร้าง object เมฆ var clouds = createClouds(radius, segments); clouds.rotation.y = rotation; scene.add(clouds) // สร้าง bg ที่เป็นดาว var stars = createStars(90, 64); scene.add(stars); // เพิ่ม event trackball ที่ทำให้หมุนได้ var controls = new THREE.TrackballControls(camera); worldgl.appendChild(renderer.domElement); render(); function render() { controls.update(); sphere.rotation.y += 0.0005; // เวลาการหมุนโลก clouds.rotation.y += 0.0005; // เวลาการหมุนเมฆ requestAnimationFrame(render); renderer.render(scene, camera); } // function สร้างโลก function createSphere(radius, segments) { return new THREE.Mesh( new THREE.SphereGeometry(radius, segments, segments), new THREE.MeshPhongMaterial({ map: THREE.ImageUtils.loadTexture('map.jpg'), bumpMap: THREE.ImageUtils.loadTexture('map_bum.jpg'), bumpScale: 0.005, transparent: true, specularMap: THREE.ImageUtils.loadTexture('wather.png'), specular: new THREE.Color('gray') }) ); } // function สร้างเมฆ function createClouds(radius, segments) { return new THREE.Mesh( new THREE.SphereGeometry(radius + 0.003, segments, segments), new THREE.MeshPhongMaterial({ map: THREE.ImageUtils.loadTexture('clouds.png'), transparent: true }) ); } // function สร้างดวงดาว function createStars(radius, segments) { return new THREE.Mesh( new THREE.SphereGeometry(radius, segments, segments), new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('galaxy_starfield.png'), side: THREE.BackSide }) ); } }()); </script>
สามารถเอาโค้ตไปลองเล่นดูครับ