ã¿ãªããããã«ã¡ã¯ïŒ
åã®
ç« ã§ãlibraryThree.jsã®åºæ¬ã玹ä»ããŸããã ããã€ãã®äŸãèŠãŠãæåã®å®å
šãªThree.jsã·ãŒã³ãäœæããŸããã ãã®ç« ã§ã¯ããã®ã©ã€ãã©ãªãããã«æ·±ãæãäžããThree.jsã·ãŒã³ãæ§æããäž»èŠãªã³ã³ããŒãã³ãããã詳现ã«èª¬æããããšããŸãã ãã®ç« ã§ã¯ã次ã®ããšã«ã€ããŠåŠç¿ããŸãã
- Three.jsã·ãŒã³ã§äœ¿çšãããã³ã³ããŒãã³ã
- THREE.SceneïŒïŒãªããžã§ã¯ãã§ã§ããããš
- çŽäº€ã«ã¡ã©ãšé è¿ã«ã¡ã©ã®éãã¯äœã§ãã
ãŸããã·ãŒã³ãäœæããŠãªããžã§ã¯ããè¿œå ããæ¹æ³ãæ€èšããŸãã
ã·ãŒã³äœæ
åã®ç« ã§ã¯ããã§ã«THREE.SceneïŒïŒãªããžã§ã¯ããäœæãããããThree.jsã©ã€ãã©ãªã®ãã®ã³ã³ããŒãã³ãã«ã€ããŠã¯ãã§ã«ããç¥ã£ãŠããŸãã ãŸããéåžžã®ã·ãŒã³è¡šç€ºã«ã¯3ã€ã®ã³ã³ããŒãã³ããå¿
èŠã§ããããšãããããŸããã
- lightïŒãããªã¢ã«ã«åœ±é¿ããã·ã£ããŠå¹æãäœæããããã«äœ¿çšãããŸã
- ã«ã¡ã©ïŒãã®ã³ã³ããŒãã³ãã¯ãã·ãŒã³ã«è¡šç€ºããããã®ã決å®ããŸã
- ã¢ãŒã¿ãŒãªããžã§ã¯ãïŒãããã¯ãã«ã¡ã©ããŒã¹ãã¯ãã£ãã«è¡šç€ºãããäž»ãªãªããžã§ã¯ãã§ãïŒç«æ¹äœãçäœãªã©ã
THREE.SceneïŒïŒãªããžã§ã¯ãã¯ãããããã¹ãŠã®ã³ã³ããŒãã³ãã®ã³ã³ãããšããŠæ©èœããŸãã ãã®ãªããžã§ã¯ãèªäœã«ã¯ãå€ãã®ãªãã·ã§ã³ãšæ©èœã¯ãããŸããã
åºæ¬çãªã·ãŒã³æ©èœ
ã·ãŒã³ã®æ©èœãåŠã¶æè¯ã®æ¹æ³ã¯ãäŸãèŠãããšã§ãã ãã®ç« ã®ãœãŒã¹ã³ãŒãïŒchapter-02ïŒã«ã¯ããµã³ãã«01-basic-scene.htmlããããŸãã ãã®äŸã䜿çšããŠãã·ãŒã³ã®æ©èœãšãªãã·ã§ã³ã説æããŸãã ãã®äŸããã©ãŠã¶ã§éããšã次ã®ãããªãã®ã衚瀺ãããŸãã

ããã¯ãåã®ç« ã§èŠããã®ãšå°ã䌌ãŠããŸãã ã·ãŒã³ã¯å°ã空ã£ãœã«èŠããŸããããã§ã«ããã€ãã®ãªããžã§ã¯ããå«ãŸããŠããŸãã 次ã®ãœãŒã¹ã³ãŒããèŠããšã
Scene.add(object)
ãªããžã§ã¯ãã«
Scene.add(object)
é¢æ°ã䜿çšããŠããã
THREE.Mesh
ïŒããã衚瀺ãããŠãããã¬ãŒã³ïŒã
THREE.SpotLight
ã
THREE.AmbientLight
ãªã©ã®ãªããžã§ã¯ããè¿œå ããŠããããšãããããŸãã
THREE.AmbientLight
THREE.Camera
ãªããžã§ã¯ãã¯ãã·ãŒã³ãã¬ã³ããªã³ã°ãããšãã«Three.jsã©ã€ãã©ãªèªäœã«ãã£ãŠèªåçã«è¿œå ãããŸãããå¿
èŠã«å¿ããŠæåã§è¿œå ããããšãã§ããŸãã
var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000); ... var planeGeometry = new THREE.PlaneGeometry(60,40,1,1); var planeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff}); var plane = new THREE.Mesh(planeGeometry,planeMaterial); ... scene.add(plane); var ambientLight = new THREE.AmbientLight(0x0c0c0c); scene.add(ambientLight); ... var spotLight = new THREE.SpotLight( 0xffffff ); ... scene.add( spotLight );
THREE.SceneïŒïŒãªããžã§ã¯ãã®è©³çŽ°ãªæ€èšãå§ããåã«ããã¢ã³ã¹ãã¬ãŒã¿ãŒã§äœãã§ããããã話ãããããšæããŸããããããã³ãŒããç解ãå§ããŸãã ãã©ãŠã¶ãŒã§äŸãéããå³äžé
ã®ã³ã³ãããŒã«ãèŠãŠãã ãããããã§ã§ããããšã¯æ¬¡ã®ãšããã§ãã
å®äŸãããã®ã³ã³ãããŒã«ã䜿çšããŠãã·ãŒã³ã«ãã¥ãŒããè¿œå ããã·ãŒã³ããæåŸã«è¿œå ããããã¥ãŒããåé€ããã·ãŒã³ã«å«ãŸãããã¹ãŠã®èŠçŽ ã®æ°ã衚瀺ã§ããŸãã ããããããµã³ãã«ãå®è¡ããã°ããã®æç¹ã§ããã§ã«4ã€ã®ãªããžã§ã¯ããã·ãŒã³ã«ååšããŠããããšã«æ°ã¥ããã§ãããã ãããç§ãã¡ã®é£è¡æ©ãæ£ä¹±å
ã®å
æºãç¹å
æºã®å
æºããããŠå
ã«è¿°ã¹ãã«ã¡ã©ã§ãã 次ã«ãã³ã³ãããŒã«ãŠãããã®åã³ã³ããŒãã³ãã詳ããèŠãŠãæãåçŽãªãã®ããå§ããŸãïŒ
addCube
ïŒïŒé¢æ°ã䜿çšããŸãã
this.addCube = function() { var cubeSize = Math.ceil((Math.random() * 3)); var cubeGeometry = new THREE.CubeGeometry(cubeSize,cubeSize,cubeSize); var cubeMaterial = new THREE.MeshLambertMaterial( {color: Math.random() * 0xffffff }); var cube = new THREE.Mesh(cubeGeometry, cubeMaterial); cube.castShadow = true; cube.name = "cube-" + scene.children.length; cube.position.x=-30 + Math.round((Math.random() * planeGeometry.width)); cube.position.y= Math.round((Math.random() * 5)); cube.position.z=-20 + Math.round((Math.random() * planeGeometry.height)); scene.add(cube); this.numberOfObjects = scene.children.length; };
ãã®ã³ãŒãã¯ãä»ã§ã¯éåžžã«ç°¡åã«ææ¡ã§ããã¯ãã§ãã ããã§ã¯å€ãã®æ°ããæŠå¿µã¯çŽ¹ä»ãããŠããŸããã
addCubeãã¿ã³ãã¯ãªãã¯ãããšã
0ã3ã®ã©ã³ãã ãµã€ãºã®æ°ãã
THREE.CubeGeometry
ã€ã³ã¹ã¿ã³ã¹ã
THREE.CubeGeometry
ãããŸãã ä»»æã®ãµã€ãºã«å ããŠããã¥ãŒãã¯ã·ãŒã³ãšè²ã®ã©ã³ãã ãªäœçœ®ãåãåããŸãã
ãã®ã³ãŒãã®æ°æ©èœã¯ã
name
å±æ§ã䜿çšããŠãã¥ãŒãã«
name
ã§ãã ãã®ååã¯ã
cube
ãšããŠæå®ãããŠããŸã-ãã§ã«ã·ãŒã³ã«ãããã¥ãŒãã®æ°ïŒ
scene.children.length
å±æ§ã䜿çšããŠ
scene.children.length
ãŸãïŒã ãããã£ãŠã
cube-1, cube-2, cube-3
ãªã©ã®ååãååŸãããŸãã ãã®ååã¯ãããã°ã«åœ¹ç«ã¡ãŸãããã·ãŒã³å
ã®ãªããžã§ã¯ããçŽæ¥æ€çŽ¢ããããã«ã䜿çšã§ããŸãã
Scene.getChildByName(name)
é¢æ°ã䜿çšããå Žåããªããžã§ã¯ããçŽæ¥ååŸããŠãããšãã°ãã®å Žæãå€æŽã§ããŸãã å€æ°
numberOfObjects
ãã·ãŒã³å
ã®èŠçŽ æ°ã®ãªã¹ãã®ãµã€ãºãšããŠã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠäœ¿çšãããŸãã ãããã£ãŠããªããžã§ã¯ããè¿œå ãŸãã¯åé€ãããšãããã®å€æ°ãã·ãŒã³å
ã®æ°ããèŠçŽ ã®æ°ã«çããå€ã«èšå®ããŸãã
ã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ã€ã¹ããåŒã³åºãããšãã§ãã次ã®é¢æ°ã¯
removeCube
ãååã瀺ãããã«ããã®ãã¿ã³ãã¯ãªãã¯ãããšãæåŸã«è¿œå ããããã¥ãŒããã·ãŒã³ããåé€ãããŸãã 以äžã«ããã®æ©èœã®å®è£
æ¹æ³ã瀺ããŸãã
this.removeCube = function() { var allChildren = scene.children; var lastObject = allChildren[allChildren.length-1]; if (lastObjectinstanceofTHREE.Mesh) { scene.remove(lastObject); this.numberOfObjects = scene.children.length; } }
ãªããžã§ã¯ããã·ãŒã³ã«
add
ããã«ã¯ã
add
ïŒïŒé¢æ°ã䜿çšããŸãã ã·ãŒã³ãããªããžã§ã¯ããåé€ããã«ã¯ãåœç¶ã®ããšã§ããã
remove
ïŒïŒé¢æ°ã䜿çšããŸãã ãã®ã³ãŒãã¹ããããã§ã¯ã
THREE.Scene()
ãªããžã§ã¯ãã®
children
ããããã£ã䜿çšããŠãè¿œå ãããæåŸã®ãªããžã§ã¯ããååŸããŸããã ãŸããã«ã¡ã©ãšã©ã€ãã®åé€ãé¿ããããã«ããªããžã§ã¯ãã
Mesh
ãªããžã§ã¯ãã§ããããšã確èªããå¿
èŠããããŸãã ãªããžã§ã¯ããåé€ããåŸãã·ãŒã³äžã®ãªããžã§ã¯ãã®æ°ã衚瀺ããã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãå床æŽæ°ããå¿
èŠããããŸãã
GUIã®æåŸã®ãã¿ã³ã¯
outputObjectsãšããŠããŒã¯ãããŠã
ãŸã ã ããããæ¢ã«ã¯ãªãã¯ããŠããããã«èŠããŸãããäœãèµ·ãããªãã£ãããã§ãã ãã®ãã¿ã³ãè¡ãããšã¯ã以äžã«ç€ºãããã«ãçŸåšã·ãŒã³ã«è¡šç€ºãããŠãããã¹ãŠã®ãªããžã§ã¯ããå°å·ããWebãã©ãŠã¶ãŒã³ã³ãœãŒã«ã«è¡šç€ºããããšã§ãã

ã³ã³ãœãŒã«ãã°ã«æ
å ±ãåºåããã³ãŒãã¯ã以äžã«ç€ºãããã«ãçµã¿èŸŒã¿ã®
console
ãªããžã§ã¯ãã䜿çšããŸãã
this.outputObjects = function() { console.log(scene.children); }
ãããã°ã«ã¯éåžžã«äŸ¿å©ã§ãã ç¹ã«ãªããžã§ã¯ãã«ååãä»ãããšããã·ãŒã³äžã®ç¹å®ã®ãªããžã§ã¯ãã®åé¡ãæ€çŽ¢ãããšãã«éåžžã«äŸ¿å©ã§ãã ããšãã°ã
cube-17
ãšããååã®ãªããžã§ã¯ãã®ããããã£ã¯æ¬¡ã®ããã«ãªããŸãã
__webglActive: true __webglInit: true _modelViewMatrix: THREE.Matrix4 _normalMatrix: THREE.Matrix3 _vector: THREE.Vector3 castShadow: true children: Array[0] eulerOrder: "XYZ" frustumCulled: true geometry: THREE.CubeGeometry id: 20 material: THREE.MeshLambertMaterial matrix: THREE.Matrix4 matrixAutoUpdate: true matrixRotationWorld: THREE.Matrix4 matrixWorld: THREE.Matrix4 matrixWorldNeedsUpdate: false name: "cube-17" parent: THREE.Scene position: THREE.Vector3 properties: Object quaternion: THREE.Quaternion receiveShadow: false renderDepth: null rotation: THREE.Vector3 rotationAutoUpdate: true scale: THREE.Vector3 up: THREE.Vector3 useQuaternion: false visible: true __proto__: Object
ãããŸã§ãã·ãŒã³ã®æ¬¡ã®é¢æ°ãèŠãŠããŸããã
Scene.Add()
ïŒãã®ã¡ãœããã¯ããªããžã§ã¯ããã·ãŒã³ã«è¿œå ããŸãScene.Remove(
ïŒïŒãã®ã¡ãœããã¯ãã·ãŒã³ãããªããžã§ã¯ããåé€ããŸãScene.children()
ïŒãã®ã¡ãœããã¯ãã·ãŒã³ãªããžã§ã¯ãã®ãã¹ãŠã®åã®ãªã¹ããååŸããŸãScene.getChildByName()
ïŒãã®ã¡ãœããã¯ãnameå±æ§ã«ãã£ãŠã·ãŒã³ããç¹å®ã®ãªããžã§ã¯ããååŸããŸã
ãããã¯ãéåžžã«é »ç¹ã«äœ¿çšããæãéèŠãªã·ãŒã³é¢æ°ã§ãã ãã ãã䟿å©ãªãã«ããŒé¢æ°ãããã€ãããããã¥ãŒãã®å転ãåŠçããã³ãŒãã䜿çšããŠãããã玹ä»ããããšæããŸãã
åã®ç« ã§èŠãããã«ãã·ãŒã³ãã¬ã³ããªã³ã°ããããã«
render
é¢æ°å
ã§ã«ãŒãã䜿çšããŸããã ãã®äŸã®åãã³ãŒãã¹ãããããèŠãŠã¿ãŸãããã
function render() { stats.update(); scene.traverse(function(e) { if (e instanceofTHREE.Mesh&& e != plane ) { e.rotation.x+=controls.rotationSpeed; e.rotation.y+=controls.rotationSpeed; e.rotation.z+=controls.rotationSpeed; } }); requestAnimationFrame(render); renderer.render(scene, camera); }
ããã§ã¯ã
THREE.Scene.traverse()
é¢æ°ã䜿çšãããŠããããšãããããŸãã é¢æ°ãžã®åŒæ°ãšããŠé¢æ°ãæž¡ãããšãã§ããŸãã ããã¯é¢æ°ã«æž¡ãããã·ãŒã³å
ã®ååã«å¯ŸããŠåŒã³åºãããŸãã
render
ïŒïŒé¢æ°ã§ã¯ã
traverse
ïŒïŒé¢æ°ã䜿çšããŠãå
cube
ã€ã³ã¹ã¿ã³ã¹ã®å転ãæŽæ°ããŸãïŒã¡ã€ã³ãã¬ãŒã³ãæ瀺çã«ç¡èŠããŸãïŒã ãããè¡ãã«ã¯ã
for
ã«ãŒãã®
children
ããããã£ã§é
åã®ãã¹ãŠã®èŠçŽ ãåæ
for
ãŸãã
Mesh
ããã³
Geometry
ãªããžã§ã¯ãã®è©³çŽ°ã«å
¥ãåã«ãã·ãŒã³ãªããžã§ã¯ãã«èšå®ã§ãã2ã€ã®èå³æ·±ãããããã£ã
fog
ãš
overrideMaterial
ã玹ä»ã
overrideMaterial
ã
ãã¬ãŒã³ã«ãã©ã°å¹æãè¿œå ããŸãã
fog
ããããã£ã䜿çšãããšãã·ãŒã³ã«ãã©ã°å¹æãè¿œå ã§ããŸãã ãªããžã§ã¯ããé ããã°é ãã»ã©ããªããžã§ã¯ãã¯è¡šç€ºãããªããªããŸãã 次ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ããã®å€èŠ³ã瀺ããŠããŸãã
å®äŸThree.jsã©ã€ãã©ãªã§çºçãããã©ã°ããããã£ã®æå¹åã¯éåžžã«ç°¡åã§ãã ã·ãŒã³ãå®çŸ©ããåŸã次ã®ã³ãŒãè¡ãè¿œå ããã ãã§ãã
scene.fog=new THREE.Fog( 0xffffff, 0.015, 100 );
ããã§ã¯ãé§ã®è²ãçœïŒ0xffffffïŒãšããŠå®çŸ©ããŸããã æåŸã®2ã€ã®åŒæ°ã¯ããã©ã°ã衚瀺ãããåŸã«å€æŽã§ããŸãã å€0.015ã¯
near
ããããã£ã«èšå®ããã100ã¯
far
ããããã£ã«èšå®ãããŸãã ãããã®2ã€ã®ããããã£ã䜿çšããŠããã©ã°ã®éå§äœçœ®ãšãã©ã°ã®å¯åºŠãéããããã©ããã決å®ã§ããŸãã ã·ãŒã³ã«ãã©ã°ãèšå®ããå¥ã®æ¹æ³ããããŸãããã®ããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
scene.fog=new THREE.FogExp2( 0xffffff, 0.015 );
ä»åã¯ã
near
ããããã£ãš
far
ããããã£ãæå®ããããã©ã°ã®è²ãšå¯åºŠã®ã¿ãæå®ã
near
ã äžè¬ã«ããããã®ããããã£ãææ¡ããããã«èªåã§ãã¬ã€ããæ¹ãé©åã§ãããå¿
èŠãªå¹æãåŸãããŸãã
overrideMaterialããããã£ã䜿çšãã
èæ
®ããæåŸã®ããããã£ã¯
overrideMaterial
ããããã£ã§ããããã¯ãã·ãŒã³å
ã®ãã¹ãŠã®ãªããžã§ã¯ãã®ãããªã¢ã«ãèšå®ããããã«äœ¿çšãããŸãã ãã®ããããã£ã䜿çšããå Žåã次ã«ç€ºãããã«ãã·ãŒã³ã«è¿œå ãããã¹ãŠã®ãªããžã§ã¯ãã¯åããããªã¢ã«ã«ãªããŸãã
scene.overrideMaterial = new THREE.MeshLambertMaterial({color: 0xffffff});
çµæã¯ä»¥äžã®ãšããã§ãã

ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ããã¥ãŒããªããžã§ã¯ãã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãåããããªã¢ã«ãšè²ã䜿çšããŠèŠèŠåãããŠããããšãã¯ã£ãããšããããŸãã ãã®äŸã§ã¯ã
MeshLambertMaterial
ãªããžã§ã¯ããã¡ã€ã³ãããªã¢ã«ãšããŠäœ¿çšã
MeshLambertMaterial
ã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãThree.jsã®ã³ã¢ã³ã³ã»ããã®æåã®1ã€ã§ããã·ãŒã³ã«ã€ããŠæ€èšããŸããã èŠããŠããã¹ãæãéèŠãªããšã¯ãåºæ¬çã«ã¯ã衚瀺ãããã¹ãŠã®ãªããžã§ã¯ããã©ã€ããã«ã¡ã©ã®ã³ã³ããã§ããããšã§ãã
Scene
ãªããžã§ã¯ãã®æãéèŠãªæ©èœãšå±æ§ãæãåºããŠãã ããã
add(object)
ïŒã·ãŒã³ã«ãªããžã§ã¯ããè¿œå ããŸãããã®é¢æ°ã䜿çšããŠãªããžã§ã¯ãã®ã°ã«ãŒããäœæããããšãã§ããŸããhildren
ïŒã«ã¡ã©ãã©ã€ããªã©ãã·ãŒã³ã«è¿œå ããããã¹ãŠã®ãªããžã§ã¯ãã®ãªã¹ããè¿ããŸããgetChildByName(name
ïŒïŒãªããžã§ã¯ããäœæãããšãã«ã name
å±æ§ã䜿çšããŠååãä»ããããšãã§ããŸãã Scene
ãªããžã§ã¯ãã«ã¯ãç¹å®ã®ååã®ãªããžã§ã¯ããçŽæ¥è¿ãããã«äœ¿çšã§ããé¢æ°ããããŸããremove(object)
ïŒã¹ããŒãžäžã®ãªããžã§ã¯ããžã®ãªã³ã¯ãããå Žåããã®é¢æ°ã䜿çšããŠã·ãŒã³ããåé€ã§ããŸãtraverse(function)
ïŒ children
å±æ§ã¯ãã·ãŒã³å
ã®ãã¹ãŠã®ãªããžã§ã¯ãã®ãªã¹ããè¿ããŸãã traverse
é¢æ°ã䜿çšããŠãã³ãŒã«ããã¯é¢æ°ãåŒæ°ãšããŠæž¡ãããšã«ããããããã®ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸããoverrideMaterial
ïŒãã®ããããã£ã䜿çšããŠãã·ãŒã³å
ã®ãã¹ãŠã®ãªããžã§ã¯ãã«åããããªã¢ã«ã䜿çšãããããšãã§ããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãã·ãŒã³ã«è¿œå ã§ãããªããžã§ã¯ããæ
éã«æ€èšããŸãã
ãžãªã¡ããªããã³ã¡ãã·ã¥ãªããžã§ã¯ããæäœãã
ç§ãã¡ãèŠãããããã®äŸã§ã¯ããžãªã¡ããªãš
Mesh
ãªããžã§ã¯ãã䜿çšãããŸããã ããšãã°ã
sphere
ãªããžã§ã¯ããã·ãŒã³ã«è¿œå ããã«ã¯ã次ã®ããã«ããŸããã
var sphereGeometry = new THREE.SphereGeometry(4,20,20); var sphereMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff); var sphere = new THREE.Mesh(sphereGeometry,sphereMaterial);
ãªããžã§ã¯ãã®åœ¢ç¶ããžãªã¡ããªããã®ãªããžã§ã¯ãã®å€èŠ³ããããªã¢ã«ã®ããããã£ã決å®ãããã¹ãŠãæ¥ç¶ããŠã·ãŒã³ã«è¿œå ããŸããã ãã®ã»ã¯ã·ã§ã³ã§ã¯ã幟äœåŠçãªããžã§ã¯ããšæ¥ç¶ãªããžã§ã¯ãã詳ããèŠãŠãããŸãã幟äœåŠçãªããžã§ã¯ãããå§ããŸãã
ãªããžã§ã¯ããžãªã¡ããªã®ããããã£ãšæ©èœ
Three.jsã©ã€ãã©ãªã«ã¯ã3Dã·ãŒã³ã«è¿œå ã§ããæ¢è£œã®ãžãªã¡ããªãªããžã§ã¯ãã®å€§ããªã»ãããä»å±ããŠããŸãã ãããªã¢ã«ãè¿œå ãã
mesh
å€æ°ãäœæããã ãã§å®äºã§ãã 以äžã«å°ããªäŸã瀺ããŸãã

Three.jsã®å¹Ÿäœãªããžã§ã¯ãã¯ãä»ã®ã»ãšãã©ã®3Dã©ã€ãã©ãªãšåæ§ã«ãäž»ã«ç©ºéå
ã®ãã€ã³ãã®ã³ã¬ã¯ã·ã§ã³ã§ãããããããã¹ãŠã®ãã€ã³ããæ¥ç¶ããäžé£ã®é¢ã§ãã ããšãã°ããã¥ââãŒããåãäžããŸãã
- ç«æ¹äœã«ã¯8ã€ã®é ç¹ããããŸãã ãããã®é ç¹ã¯ãããããxãyãz座æšã®çµã¿åãããšããŠå®çŸ©ã§ããŸãã ãããã£ãŠãåãã¥ãŒãã«ã¯ç©ºéã«8ã€ã®ãã€ã³ãããããŸãã Three.jsã©ã€ãã©ãªã§ã¯ããããã®ãã€ã³ãã¯é ç¹ãšåŒã°ããŸãã
- ç«æ¹äœã«ã¯6ã€ã®èŸºããããåè§ã«1ã€ã®é ç¹ããããŸãã Thee.jsã©ã€ãã©ãªã§ã¯ããããã®åé¢ã¯ãã§ã€ã¹ãšåŒã°ããŸãã
Thee.jsã©ã€ãã©ãªã䜿çšããå Žåã幟äœåŠçãªããžã§ã¯ããäœæãããšãããã¹ãŠã®é ç¹ãšé¢ãèªåã§å®çŸ©ããå¿
èŠã¯ãããŸããã ãã¥ãŒãã®å Žåãé«ããå¹
ãæ·±ãã決å®ããã ãã§ãã e.jsã©ã€ãã©ãªã¯ãã®æ
å ±ã䜿çšããŠãç®çã®äœçœ®ã«8ã€ã®é ç¹ãæã€æ£ãã幟äœåŠçãªããžã§ã¯ããäœæããŸãã 幟äœãªããžã§ã¯ããäœæãããšããéåžžã¯ã©ã€ãã©ãªã«ãã£ãŠææ¡ãããæšæºãªããžã§ã¯ãã䜿çšããŸããã以äžã«ç€ºãããã«ãé ç¹ãšé¢ãå®çŸ©ããããšã§ãªããžã§ã¯ããæåã§äœæã§ããŸãã
var vertices = [ new THREE.Vector3(1,3,1), new THREE.Vector3(1,3,-1), new THREE.Vector3(1,-1,1), new THREE.Vector3(1,-1,-1), new THREE.Vector3(-1,3,-1), new THREE.Vector3(-1,3,1), new THREE.Vector3(-1,-1,-1), new THREE.Vector3(-1,-1,1) ]; var faces = [ new THREE.Face3(0,2,1), new THREE.Face3(2,3,1), new THREE.Face3(4,6,5), new THREE.Face3(6,7,5), new THREE.Face3(4,5,1), new THREE.Face3(5,0,1), new THREE.Face3(7,6,2), new THREE.Face3(6,3,2), new THREE.Face3(5,7,0), new THREE.Face3(7,2,0), new THREE.Face3(1,3,4), new THREE.Face3(3,6,4), ]; var geom = new THREE.Geometry(); geom.vertices = vertices; geom.faces = faces; geom.computeCentroids(); geom.mergeVertices();
ãã®ã³ãŒãã¯ãåçŽãªãã¥ãŒããäœæããæ¹æ³ã瀺ããŠããŸãã é ç¹ã®é
åã§ç«æ¹äœãæ§æãããã€ã³ããå®çŸ©ããŸããã ãããã®ãã€ã³ãã¯æ¥ç¶ãããŠäžè§åœ¢ã®é¢ãäœæããé¢ã®é
åã«æ ŒçŽãããŸãã ããšãã°ãèŠçŽ
newTHREE.Face3(0,2,1)
ã¯ãé ç¹ã®é
åãããã€ã³ã
newTHREE.Face3(0,2,1)
ã䜿çšããŠäžè§åœ¢ã®é¢ãäœæããŸãã
次ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãé ç¹ã®äœçœ®ãæäœã§ããäŸã瀺ããŠããŸãã
å®äŸãã®äŸã¯ãåè¿°ã®ãã¹ãŠã®äŸãšåæ§ã«ã
render
é¢æ°å
ã§ã«ãŒãã
render
ãŸãã ããããããŠã³ã³ã³ãããŒã«ããã¯ã¹ã§äœããå€æŽãããšããã®é ç¹ã®ããããã®äœçœ®ã®å€æŽã«åºã¥ããŠããã¥ãŒããæ£ãã衚瀺ãããŸãã ããã©ãŒãã³ã¹ãåäžãããããã«ãThree.jsã©ã€ãã©ãªã¯ãã°ãªããã®ãžãªã¡ããªãæéãšãšãã«å€åããªãããšãåæãšããŠããŸãã ãµã³ãã«ãæ©èœããããšã確èªããã«ã¯ã
render
é¢æ°ã«ãŒãå
ã«æ¬¡ã®ã³ãŒãè¡ãè¿œå ããŸãã
mesh.geometry.vertices=vertices; mesh.geometry.verticesNeedUpdate=true; mesh.geometry.computeFaceNormals();
ãã®ã³ãŒãã®æåã®è¡ã§ã¯ã
mesh
ãªããžã§ã¯ãã«è¡šç€ºãããŠããé ç¹ã®é
åãæŽæ°ããŸãã é¢ã¯ä»¥åãšåããã€ã³ãã«å¶éãããŠãããããé¢ãåæ§æããå¿
èŠã¯ãããŸããã é ç¹é
åãæŽæ°ããåŸãé ç¹é
åãæŽæ°ããå¿
èŠãããããšãæ瀺çã«èšãå¿
èŠããããŸãã ã§ããããšã¯ã
verticesNeedUpdategeometry
ããããã£ã
true
èšå®ããããš
true
ã æåŸã«ã
computeFaceNormals
ïŒïŒé¢æ°ã䜿çšããŠãå®å
šã«æŽæ°ãããã¢ãã«ã®é¢ãåèšç®ããŸãã
æåŸã«
geometry
æ©èœã¯ã
clone
ïŒïŒé¢æ°ã§ãã
geometry
ãªããžã§ã¯ãã®åœ¢ç¶ã決å®ãããããªã¢ã«ãšçµã¿åãããŠãã·ãŒã³ã«è¿œå ããŠThree.jsã©ã€ãã©ãªã䜿çšããŠæç»ã§ãããªããžã§ã¯ããäœæã§ããããšã説æããŸããã
clone
ïŒïŒé¢æ°ã䜿çšãããšãååã瀺ãããã«ããžãªã¡ããªã®ã³ããŒãäœæããããã䜿çšããŠãç°ãªããããªã¢ã«ã§å¥ã®
mesh
ãªããžã§ã¯ããäœæã§ããŸãã åã®äŸã§ã¯ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã«
ã¯ããŒã³ãã¿ã³ã衚瀺ãããŸãã

ãã®ãã¿ã³ãã¯ãªãã¯ãããšãçŸåšã®å€ããªããžã§ã¯ããšåããžãªã¡ããªãæã€ã¯ããŒã³ã衚瀺ãããæ°ãããªããžã§ã¯ããå¥ã®ãããªã¢ã«ããäœæãããŠã·ãŒã³ã«è¿œå ãããŸãã ãã®ã³ãŒãã¯éåžžã«ç°¡åã§ããã䜿çšããçŽ æã®ããã«å°ãè€éã«ãªã£ãŠããŸãã å§ããããã«ããã¥ãŒãã®ææãäœæããããã«äœ¿çšãããã³ãŒããé ãè¿œã£ãŠèŠãŠã¿ãŸãããã
var materials = [ new THREE.MeshLambertMaterial( { opacity:0.6, color: 0x44ff44,transparent:true } ), new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true } ) ];
ã芧ã®ãšããã1ã€ã®ãããªã¢ã«ã§ã¯ãªãã2ã€ã®ãããªã¢ã«ã®é
åã䜿çšããŸããã ãã®çç±ã¯ãéæãªç«æ¹äœã衚瀺ããããšã«å ããŠãé ç¹ãšé¢ã®äœçœ®ãæ確ã«ç€ºããããã¯ã€ã€ãã¬ãŒã ã衚瀺ãããã£ãããã§ãã ãã¡ãããThree.jsã©ã€ãã©ãªã¯ã
mesh
ãªããžã§ã¯ããäœæãããšãã«è€æ°ã®ãããªã¢ã«ã®äœ¿çšããµããŒãããŠããŸãã ããã«ã¯ã以äžã«ç€ºãããã«
SceneUtils.createMultiMaterialObject()
é¢æ°ã䜿çšã§ããŸãã
var mesh = THREE.SceneUtils.createMultiMaterialObject(geom,materials);
ãã®é¢æ°ã§ã¯ãThree.jsã©ã€ãã©ãªã¯
THREE.Mesh
1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããªãããã«ããŸãããæå®ãããããªã¢ã«ããšã«1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããããã¹ãŠã®ãªããžã§ã¯ããã°ã«ãŒãã«å
¥ããŸãã ãã®ã°ã«ãŒãã¯ãã¹ããŒãžäžã®ä»ã®ãªããžã§ã¯ããšåãããã«äœ¿çšã§ããŸãã ã°ãªãããè¿œå ããããååã§ã°ãªãããååŸãããã§ããŸãã ããšãã°ããã®ã°ã«ãŒãã®ãã¹ãŠã®åã«åœ±ãè¿œå ããã«ã¯ã次ã®ããã«ããŸãã
mesh.children.forEach(function(e) {e.castShadow=true});
ããŠãå
ã»ã©èª¬æããcloneïŒïŒé¢æ°ã«æ»ããŸãã
this.clone = function() { var cloned = mesh.children[0].geometry.clone(); var materials = [ new THREE.MeshLambertMaterial( { opacity:0.6, color: 0xff44ff, transparent:true } ), new THREE.MeshBasicMaterial({ color: 0x000000, wireframe: true } ) ]; var mesh2 = THREE.SceneUtils.createMultiMaterialObject(cloned,materials); mesh2.children.forEach(function(e) {e.castShadow=true}); mesh2.translateX(5); mesh2.translateZ(5); mesh2.name="clone"; scene.remove(scene.getChildByName("clone")); scene.add(mesh2); }
ãã®ã³ãŒãã¯ã
ã¯ããŒã³ãã¿ã³ãã¯ãªãã¯ããããšåŒã³åºãããŸãã ããã§ã¯ãæåã®ãã¥ãŒãã®åã®ãžãªã¡ããªãè€è£œããŸãã
mesh
å€æ°ã«ã¯ã
MeshLambertMaterial
ã䜿çšããã¡ãã·ã¥ãš
MeshLambertMaterial
ã䜿çšããã¡ãã·ã¥ã®2ã€ã®åãããããšã«
MeshLambertMaterial
ããŠ
MeshBasicMaterial
ã ãã®è€è£œããããžãªã¡ããªã«åºã¥ããŠãæ°ããã¡ãã·ã¥ãäœæãã
mesh2
ãšããååãä»ã
mesh2
ã
ã°ãªããé¢æ°ãšå±æ§
ã¡ãã·ã¥ãäœæããã«ã¯ããžãªã¡ããªãš1ã€ãŸãã¯è€æ°ã®ãããªã¢ã«ãå¿
èŠã§ããããšããã§ã«ããã£ãŠããŸãã ã°ãªãããååŸãããããããã·ãŒã³ã«è¿œå ããŠã¬ã³ããªã³ã°ã§ããŸãã ãã®ã°ãªãããã¹ããŒãžäžã®ã©ãã«è¡šç€ºããããã«åœ±é¿ãäžããããã«äœ¿çšã§ããããããã£ãããã€ããããŸãã æåã®äŸã§ã¯ã次ã®äžé£ã®ããããã£ãšé¢æ°ãæ€èšããŸãã
position
ïŒèŠªã®äœçœ®ãåºæºã«ããŠãã®ãªããžã§ã¯ãã®äœçœ®ã決å®ããŸãã ã»ãšãã©ã®å Žåããªããžã§ã¯ãã®èŠªã¯THREE.Scene()
ãªããžã§ã¯ãTHREE.Scene()
rotation
ïŒãã®ããããã£ã䜿çšãããšããªããžã§ã¯ãã®è»žã®1ã€ãäžå¿ãšããå転ãèšå®ã§ããŸãscale
ïŒãã®ããããã£ã䜿çšãããšãxãyãz軞ã«æ²¿ã£ãŠãªããžã§ã¯ããã¹ã±ãŒãªã³ã°ã§ããŸãtranslateX(amount)
ïŒæå®ãããå€ã ããªããžã§ã¯ããx軞ã«æ²¿ã£ãŠç§»åããŸãtranslateY(amount
ïŒïŒy軞ã«æ²¿ã£ãŠæå®ãããå€ã ããªããžã§ã¯ãã移åããŸãtranslateZ(amount)
ïŒz軞ã«æ²¿ã£ãŠæå®ãããå€ã ããªããžã§ã¯ãã移åããŸã
ãã€ãã®ããã«ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãããããã¹ãŠã®ããããã£ãæäœã§ããæ¢è£œã®äŸãæ€èšããŸãã
å®äŸãããã«ã€ããŠã話ãããŸãããã
position
ããããã£ããå§ããŸãã æ¢ã«ãã®ããããã£ãæ°åèŠãŸããã®ã§ãããã«ä¿®æ£ããŸãããã ãã®ããããã£ã䜿çšããŠããªããžã§ã¯ãã®xãyãããã³z座æšãèšå®ã§ããŸãã ãªããžã§ã¯ãã®äœçœ®ã¯ãéåžžã¯ã·ãŒã³ã§ãã芪ãªããžã§ã¯ãã«äŸåããŸãã ãªããžã§ã¯ãã®positionããããã£ã¯ã3ã€ã®ç°ãªãæ¹æ³ã§èšå®ã§ããŸãã å座æšã¯ã次ã®ããã«çŽæ¥èšå®ã§ããŸãã
cube.position.x=10; cube.position.y=3; cube.position.z=1;
ãããã1ã€ã®ã³ãã³ãã§ãããè¡ãããšãã§ããŸãã
cube.position.set(10,3,1);
3çªç®ã®ãªãã·ã§ã³ããããŸãã
position
ããããã£ã¯ãåºæ¬çã«
THREE.Vector.
ãªããžã§ã¯ã
THREE.Vector.
ããã¯ããªããžã§ã¯ããæ£ããå Žæã«é
眮ããããã«æ¬¡ã®ããšãã§ããããšãæå³ããŸãã
cube.postion=new THREE.Vector3(10,3,1)
ä»ã®
mesh
ããããã£ãæ€èšãç¶ããåã«ãå°ããªã€ã³ãã³ããäœæããããšæããŸãã
ãªããžã§ã¯ãã®äœçœ®ã¯ããã®èŠªã®äœçœ®ã«å¿ããŠèšå®ããããšè¿°ã¹ãŸãããTHREE.Geometry
è€æ°ã®ãªããžã§ã¯ãã®äœæã«å°å¿µããåã®ã»ã¯ã·ã§ã³ã§ã¯ãé¢æ°ã䜿çšããŸããTHREE.SceneUtils.createMultiMaterialObject
ãç¹°ãè¿ããŸãããå®éã«ã¯ããã®é¢æ°ã¯1ã€ã®ã°ãªããã§ã¯ãªããåããžãªã¡ããªã«åºã¥ããŠåãããªã¢ã«ã®åå¥ã®ã°ãªãããå«ãã°ã«ãŒãå
šäœãè¿ããšããäºå®ã«çŠç¹ãåœãŠãŸããç§ãã¡ã®å Žåããã®ã°ã«ãŒãã¯2ã€ã®ã°ãªããã§æ§æãããŠããŸããäœæãããã°ãªããã®1ã€ã®äœçœ®ãå€æŽãããšããããå®éã«ã¯å¥ã®ãªããžã§ã¯ãã§ããããšãæ確ã«ããããŸãããã ããäœæããã°ã«ãŒããåã§ç§»åãããšããªãã»ããã¯åããŸãŸã«ãªããŸãã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«2ã€ã®ã°ãªããã瀺ããŸãã[
OK]ããªã¹ãã®æ¬¡ã¯ããããã£ã§ãrotation
ãããªãã¯ãã§ã«ããã®ããããã£ãšåã®äŸã§ãã®ããããã£ãæ°å䜿çšããŠããããšã«ãã§ã«æ°ä»ããŠããŸãããã®ããããã£ã䜿çšããŠã軞ã®1ã€ãäžå¿ãšãããªããžã§ã¯ãã®å転ãèšå®ã§ããŸãããã®å€ã¯ãããããã£ã«å¯ŸããŠè¡ã£ãã®ãšåãæ¹æ³ã§èšå®ã§ããŸãposition
ãåŠæ ¡ã§èŠããŠããã¹ãå®å
šãªé©åœã¯2piã§ãã次ã®äŸã§ã¯ããããã©ã®ããã«æ§æãããŠãããã確èªã§ããŸãã cube.rotation.x=0.5*Math.PI; cube.rotation.set(0.5*Math.PI,0,0); cube.rotation = new THREE.Vector3(0.5*Math.PI,0,0);
åæããããªã¹ãã®æ¬¡ã®ããããã£ã¯property scale
ã§ããäžè¬ã«ããã®ããããã£ã®ååã¯ããèªäœãè¡šããŠããŸããç¹å®ã®è»žã«æ²¿ã£ãŠãªããžã§ã¯ããã¹ã±ãŒãªã³ã°ã§ããŸãã 1æªæºã®å€ãèšå®ãããšã以äžã«ç€ºãããã«ãªããžã§ã¯ããæžå°
ããŸãã1ãã倧ããå€ã䜿çšãããšã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãªããžã§ã¯ãã倧ãããªããŸãã
æåŸã«ããã®ç« ã§ã¯ãé¢æ°ã®ç§»åã«ã€ããŠèª¬æããŸãã移åããããšã§ãªããžã§ã¯ãã®äœçœ®ãå€æŽããããšãã§ããŸãããç®çã®çµ¶å¯Ÿäœçœ®ã決å®ãã代ããã«ããªããžã§ã¯ããçŸåšã®äœçœ®ã«å¯ŸããŠçžå¯Ÿçã«ç§»åããå Žæã決å®ããŸããããšãã°ããªããžã§ã¯ãããããŸãsphere
ã·ãŒã³ã«è¿œå ããã座æšã¯ïŒ1,2,3ïŒã§ãã次ã«ãé¢æ°translateX
ïŒ4ïŒã䜿çšããŠãã®ãªããžã§ã¯ããx軞ã«æ²¿ã£ãŠç§»åããŸããçŸåšã座æšïŒ5,2,3ïŒããããŸãã圌ã«æåã®äœçœ®ããšã£ãŠãããããå Žåã¯ãtranslateX
ïŒ-4ïŒãåŒã³åºãå¿
èŠããããŸããåã®äŸã䜿çšããŠããããã®ããããã£ããããããšãã§ããŸããããŸããŸãªã«ã¡ã©ã䜿çšãã
Three.jsã©ã€ãã©ãªã«ã¯ãçŽäº€ã«ã¡ã©ãšé è¿æ³ã«ã¡ã©ã®2çš®é¡ã®ã«ã¡ã©ããããŸããä»åã¯ããããã®ãªããžã§ã¯ãã®æäœã®åºæ¬ãèæ
®ããããšã ãã«å¶éããŸãããããã®ã«ã¡ã©ã®éãã説æããæè¯ã®æ¹æ³ã¯ãããã€ãã®äŸãèŠãããšã§ããçŽäº€ã«ã¡ã©ãšéèŠã«ã¡ã©
ãã®ç« ã®äŸã«ã¯ããšããäŸããããŸã07-both-cameras.html
ããã®äŸãéããšã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã®ãããªãã®ã衚瀺ãããŸãã
ããã¯ããŒã¹ãã¥ãŒãšåŒã°ããæãèªç¶ã§ãããã®ã¹ã¯ãªãŒã³ã·ã§ãããããããããã«ããã¥ãŒããã«ã¡ã©ããé ãããã»ã©è¡šç€ºãããªããªããŸããïŒç§ãã¡ã¯çŽäº€ãããThree.jsã©ã€ãã©ãªããµããŒãããããŸããŸãªã¿ã€ãã«ãã©ãŒã«ã¹ãå€æŽããå Žåãæã
ã¯ãã®ãããªäœãèŠãããšãã§ããŸã
Aäœæ¥ã®äŸããçŽäº€ã«ã¡ã©ããã¯ããã¹ãŠã®ç«æ¹äœãåããµã€ãºã§ãã被åäœãšã«ã¡ã©ã®éã®è·é¢ã¯éèŠã§ã¯ãããŸãããããã¯ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãSimCity 4ããã³Civilizationã®ä»¥åã®ããŒãžã§ã³ãªã©ã®2Dã²ãŒã ã§ãã䜿çšãããŸãã
ã»ãšãã©ã®å Žåãå®äžçã«æãè¿ããããææãªã«ã¡ã©ã䜿çšããŸããã«ã¡ã©ã®åãæ¿ãã¯å®éã«ã¯éåžžã«ç°¡åã§ãã次ã®ã³ãŒãã¹ããããã¯ãæåŸã®äŸã§switchCameraãã¿ã³ãã¯ãªãã¯ãããšã©ããªããã瀺ããŠããŸãã this.switchCamera = function() { if (camera instanceof THREE.PerspectiveCamera) { camera = new THREE.OrthographicCamera( window.innerWidth / - 16, window.innerWidth / 16, window.innerHeight / 16, window.innerHeight / - 16, -200, 500 ); camera.position.x = 2; camera.position.y = 1; camera.position.z = 3; camera.lookAt(scene.position); this.perspective = "Orthographic"; } else { camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.x = 120; camera.position.y = 60; camera.position.z = 180; camera.lookAt(scene.position); this.perspective = "Perspective"; } };
ãã®ãªã¹ãã§ã¯ããªããžã§ã¯ãã§THREE.PerspectiveCamera
ã¯ãªããªããžã§ã¯ãã®äœææ¹æ³ã«éããããããšãããããŸãTHREE.OrthographicCamera
ããŸãããªããžã§ã¯ããåæããŸãããTHREE.PerspectiveCamera
ã以äžã®åŒæ°ãåããŸããfov
: . , . , 180 , 360 . , , , . , , 60 90 . 45 .aspect
: , . , . : window.innerWidth/window.innerHeight
.near
: , Three.js . , , . 0,1far
: . , , , . : 1000.
次ã®å³ã¯ããããã®ããããã£ãã©ã®ããã«é£æºãããã®æŠèŠã瀺ããŠã
ãŸããçŽäº€ã«ã¡ã©ãæ§æããã«ã¯ãä»ã®ããããã£ã䜿çšããå¿
èŠããããŸããçŽäº€æ圱ã¯ã䜿çšããæ¯çããã·ãŒã³ãèŠãèŠéã«äŸåããŸããããã¹ãŠã®ãªããžã§ã¯ãã¯1ã€ã®ãµã€ãºã§è¡šç€ºãããŸããçŽäº€ã«ã¡ã©ã®å Žåã衚瀺ããç«æ¹äœã決å®ããå¿
èŠããããŸãããªããžã§ã¯ãã«ã©ããªããããã£ãããã®ãââèããŠã¿ãŸãããOrthographicCamera
ïŒleft
ïŒThree.jsããã¥ã¡ã³ãã§ã¯ãå·Šé¢ã§ã«ã¡ã©ãããªãã³ã°ããããã«èšè¿°ãããŠããŸããããã¯å·ŠããŒããŒãšããŠç解ã§ããŸããã€ãŸãããã®å€ã-100ã«èšå®ãããšãå·ŠåŽã«äœãããããããããŸãããright
ïŒããããã£ãšåãã§ãleft
ããä»åã¯ç»é¢ã®å察åŽã§ããå³åŽã®ãã®ã¯è¡šç€ºãããŸãããtop
ïŒäžãã£ã¹ãã¬ã€ã®å¢çç·bottom
ïŒäžéšãã£ã¹ãã¬ã€å¢çnear
ïŒãã®æç¹ãããã«ã¡ã©ã®äœçœ®ã«å¿ããŠãã·ãŒã³ã衚瀺ãããŸãfar
ïŒãããŸã§ã¯ãã«ã¡ã©ã®äœçœ®ã«å¿ããŠãã·ãŒã³ã衚瀺ãããŸãã
ãããã®ããããã£ã¯ãã¹ãŠæ¬¡ã®å³ã«ç€ºãããŠããŸãã
ç¹å®ã®ãã€ã³ãã«ã«ã¡ã©ã®çŠç¹ãåããã
ãããŸã§ãã«ã¡ã©ã®äœææ¹æ³ãšãã®ããŸããŸãªããããã£ã®æå³ã«ã€ããŠèŠãŠããŸãããåã®ç« ã§ã¯ãã«ã¡ã©ãã¹ããŒãžäžã®ã©ããã«é
眮ããå¿
èŠããããã«ã¡ã©ã衚瀺ãããŠããã·ãŒã³ã®äžå¿ãæãããšãåŠç¿ããŸãããéåžžãã«ã¡ã©ã¯åº§æšã䜿çšããŠãã·ãŒã³ã®äžå¿ã«åããããŠããŸãposition (0,0,0)
ããã ããã«ã¡ã©ãèŠãŠãããã€ã³ãã¯ç°¡åã«å€æŽã§ããŸããããã¯æ¬¡ã®ããã«è¡ãããŸãã camera.lookAt(new THREE.Vector3(x,y,z));
ïŒèµ€ãå°ãä»ããç¹ãèŠãŠãäŸãã°ãã«ã¡ã©ã®åããèæ
®ããŠã¯ã次ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããŠãã
äœæ¥ã®äŸã08-cameras-lookat.htmlã®äŸãéããšãã·ãŒã³ãå·Šããå³ã«ç§»åããããšãããããŸããå®éãã·ãŒã³ã¯åããŠããŸããããã®ã«ã¡ã©ã¯ããŸããŸãªãã€ã³ãããèŠãããããã·ãŒã³ãå·Šããå³ã«åããå¹æãåŸãããŸãããã®äŸã§ã¯ãçŽäº€ã«ã¡ã©ã«åãæ¿ããããšãã§ããŸããããã§ã¯ãã©ã®ãããªå€æŽãçºçãããã確èªããããŒã¹ãã¥ãŒã«ã¡ã©ãšã®éããç解ããŸãããããã«
ãã®ç¬¬2ã®å
¥éç« ã§ã¯ãå€ãã®ãã€ã³ãã«æ³šç®ããŸãããããã«ãããã·ãŒã³ãšã¯äœãããããŠã·ãŒã³ã§æãéèŠãªã³ã³ããŒãã³ãã¯äœãã«ã€ããŠã®æŠèŠãããããŸãã次ã®æ°ç« ã§ã¯ãThree.jsã©ã€ãã©ãªã®è©³çŽ°ãããã«è©³ããèŠãŠãããŸãããã®ç« ããèŠããŠããã¹ããã€ã³ãã®ããã€ãã以äžã«ç€ºããŸãã- ã·ãŒã³ã¯Three.jsã©ã€ãã©ãªã®ã¡ã€ã³ã³ã³ãããŒã§ããä»»æã®ãªããžã§ã¯ããè¿œå ã§ããŸãã
- ã·ãŒã³ã«ã¯ããã€ãã®ç¹å¥ãªãªãã·ã§ã³ãšããããã£ããããŸããæãéèŠãªã®ã¯ããªããžã§ã¯ãã®è¿œå ãåé€ãã·ãŒã³ã¢ããªãã¥ãŒããªã©ã®æäœãå¯èœã«ããããšã§ã
children
ã - ã·ãŒã³ã«ãã©ã°ãç°¡åã«è¿œå ãããã®ããããã£ã«ææ¡ããããã©ã¡ãŒã¿ã調æŽã§ããŸãã
- . , , .
- Three.js . , , , .
- , .
translate
.- , . Three.js : .
- .
- .
次ã®ç« ã§ã¯ãThree.jsã©ã€ãã©ãªã§å©çšå¯èœãªããŸããŸãªå
æºã«ã€ããŠèŠãŠãããŸããããŸããŸãªå
æºãã©ã®ããã«åäœããããããããäœæããã³ã«ã¹ã¿ãã€ãºããæ¹æ³ãåŠç¿ããŸããGitHub PSãžã®ãªã³ã¯ãã¹ãŠã®ç¿»èš³ã®æ¬ é¥ãLANã«éä¿¡ããŠãã ããã