"use strict"; // 參考 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode //////////////////////////////////////////////////////////////////////////////// // 挑出一個字,數字 1 // 修改 SquareGeometry 裡的 UV 值 // 從貼圖中挑出數字 1 // 你只能修改 uvs 陣列 //////////////////////////////////////////////////////////////////////////////// var camera, scene, renderer; var cameraControls, effectController; var clock = new THREE.Clock(); function SquareGeometry() { var geo = new THREE.Geometry(); // 產生頂點 geo.vertices.push( new THREE.Vector3( 0.0, 0.0, 0.0 ) ); geo.vertices.push( new THREE.Vector3( 1.0, 0.0, 0.0 ) ); geo.vertices.push( new THREE.Vector3( 1.0, 1.0, 0.0 ) ); geo.vertices.push( new THREE.Vector3( 0.0, 1.0, 0.0 ) ); // 修改這個陣列選取貼圖的正確部位 var uvs = []; uvs.push( new THREE.Vector2( 0.0, 0.0 ) ); uvs.push( new THREE.Vector2( 1.0, 0.0 ) ); uvs.push( new THREE.Vector2( 1.0, 1.0 ) ); uvs.push( new THREE.Vector2( 0.0, 1.0 ) ); // 產生面 geo.faces.push( new THREE.Face3( 0, 1, 2 ) ); geo.faceVertexUvs[ 0 ].push( [ uvs[0], uvs[1], uvs[2] ] ); geo.faces.push( new THREE.Face3( 0, 2, 3 ) ); geo.faceVertexUvs[ 0 ].push( [ uvs[0], uvs[2], uvs[3] ] ); // 完成:回傳 return geo; } function fillScene() { scene = new THREE.Scene(); var myPolygon = new SquareGeometry(); var myTexture = THREE.ImageUtils.loadTexture( '/cs291/texture/lettergrid.png' ); var myPolygonMaterial = new THREE.MeshBasicMaterial( { map: myTexture } ); var polygonObject = new THREE.Mesh( myPolygon, myPolygonMaterial ); scene.add(polygonObject); } function init() { canvasWidth = window.innerWidth; canvasHeight = window.innerHeight; var canvasRatio = canvasWidth/canvasHeight; // RENDERER renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.gammaInput = true; renderer.gammaOutput = true; renderer.setSize(canvasWidth, canvasHeight); renderer.setClearColorHex( 0xFFFFFF, 1.0 ); // 攝影機:Y 上、X 右、Z 上 camera = new THREE.PerspectiveCamera( 1, canvasRatio, 50, 150 ); camera.position.set( 0.5, 0.5, 100 ); // 控制 cameraControls = new THREE.OrbitAndPanControls(camera, renderer.domElement); cameraControls.target.set(0.5,0.5,0); } function addToDOM() { var container = document.getElementById('container'); var canvas = container.getElementsByTagName('canvas'); if (canvas.length>0) { container.removeChild(canvas[0]); } container.appendChild( renderer.domElement ); } function drawHelpers() { // 背景格線與軸。格線一格為 1,軸交叉在 (0, 0) Coordinates.drawGrid({size:100,scale:1,orientation:"z",offset:-0.01}); Coordinates.drawAxes({axisLength:2.1,axisOrientation:"x",axisRadius:0.004,offset:-0.01}); Coordinates.drawAxes({axisLength:2.1,axisOrientation:"y",axisRadius:0.004,offset:-0.01}); } function animate() { window.requestAnimationFrame(animate); render(); } function render() { var delta = clock.getDelta(); cameraControls.update(delta); renderer.render(scene, camera); } function setupGui() { effectController = { alpha: 0.7, sred: 0xE5/255, sgreen: 0x33/255, sblue: 0x19/155, dred: 0xE5/255, dgreen: 0xE5/255, dblue: 0x66/255 }; } document.addEventListener("DOMContentLoaded", function () { try { init(); fillScene(); setupGui(); drawHelpers(); addToDOM(); animate(); } catch(e) { var errorReport = "你的程式遇到不可復原的錯誤,無法繪製 Canvas。錯誤是:<br/><br/>"; $('#container').append(errorReport+e); } })