Csatlakozás már létező vászon objektumhoz
Második nekifutásra egy létező, a weboldalba ágyazott, rögzített méretű vászonhoz csatlakoztatjuk a renderelőt. Megismerkedünk az interaktív vezérlés egyik módjával is.
Második nekifutásra egy létező, a weboldalba ágyazott, rögzített méretű vászonhoz csatlakoztatjuk a renderelőt. Megismerkedünk az interaktív vezérlés egyik módjával is.
Eredmény megtekintése külső ablakban (ThreeJsCanvasExample.html).
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Three.js Canvas Example</title>
<style>
body { margin: 0; }
</style>
</head>
<body onload="init()">
<h1>Three.js megjelenítés létező HTML5 canvas objektumban</h1>
<div>
<canvas id="myCanvas" width="400" height="200" border="1px"></canvas>
</div>
<script src="js/three.min.js"></script>
<script src="js/TrackballControls.js"></script>
<script>
var scene, camera, renderer;
var controls;
var geometry, material, mesh;
function init() {
container = document.getElementById( 'myCanvas' );
renderer = new THREE.WebGLRenderer( { antialias: true, canvas: container } );
renderer.setSize( container.clientWidth, container.clientHeight );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 75, container.clientWidth / container.clientHeight, 0.1, 1000 );
camera.position.z = 15;
controls = new THREE.TrackballControls( camera, renderer.domElement );
controls.rotateSpeed = 5.0;
controls.panSpeed = 1.0;
//geometry = new THREE.BoxGeometry( 10, 10, 10 );
geometry = new THREE.SphereGeometry( 8, 50, 30);
material = new THREE.MeshBasicMaterial( { color: 0x00ff00, wireframe: true } );
mesh = new THREE.Mesh( geometry, material );
mesh.rotation.z = 0.2;
scene.add( mesh );
var axisHelper = new THREE.AxisHelper( 12 );
scene.add( axisHelper );
render();
}
var render = function () {
requestAnimationFrame( render );
controls.update();
renderer.render(scene, camera);
};
</script>
</body>
</html>
Figyeljük meg, hogy a vászonra vonatkozó stílusdefiníciót kivettük a fejlécből!
A HTML definíciós részben (nem a JavaScript kódban!) definiáljuk a vásznat. Az id attribútummal nevet adunk neki, ezzel a névvel tudjuk az összekapcsolást elvégezni. Beállítjuk a rögzített méretet is.
<div>
<canvas id="myCanvas" width="400" height="200" border="1px"></canvas>
</div>
Szkriptünk init() függvényében elvégezzük az összerendelést. Figyeljük meg, hogy a renderelőnek átadjuk a vászon DOM objektumát.
Figyeljünk arra, hogy a renderelő méretét és a kamera paramétereket ne a window, hanem a container objektum adataival számoljuk ki! Jobban függetleníthetjük a kódunkat a két eset különbözőségétől, ha felveszünk globális változókat a szélességre (pl. WIDTH) és magasságra (HEIGHT), az init() függvényünk elején típustól függően kezdőértéket adunk, majd ezeket a változókat használjuk a kód további részében.
container = document.getElementById( 'myCanvas' );
renderer = new THREE.WebGLRenderer( { antialias: true, canvas: container } );
renderer.setSize( container.clientWidth, container.clientHeight );
camera = new THREE.PerspectiveCamera( 75, container.clientWidth / container.clientHeight, 0.1, 1000 );
Mivel a vászon mérete rögzített, ezért nincs szükség az ablak méretváltozásának követésére.
A kamera paramétereket interaktívan az egérrel is vezérelhetjük. Ehhez a Three.js példakönyvtárában többféle kész kódot is találunk. Ebben a példaprogramban a TrackballControlls.js fájlt használjuk. Mivel ez a Three.js magján kívüli kód, külön be kell másolni a js mappába! A three.js mellett ezt is be kell emelni a kódba.
A bal egérgomb lenyomásával foroghatunk az origó körül. A görgő segítségével zoomolhatunk. A jobb egérgomb lenyomásával mozgathatjuk a kamerát.
<script src="js/three.min.js"></script>
<script src="js/TrackballControls.js"></script>
Az init() függvényünkben hozzunk létre egy új vezérlőt és állítsuk be a vezérlés sebességét.
controls = new THREE.TrackballControls( camera, renderer.domElement );
controls.rotateSpeed = 5.0;
controls.panSpeed = 1.0;
A render() függvényben frissítsük a megjelenítést.
controls.update();