Zoeken…


Opmerkingen

Voorbeelden werken vanaf three.js R79 (revisie 79).

THREE.BoxGeometry

THREE.BoxGeometry bouwt dozen zoals kubussen en kubussen.

Cubes

Kubussen gemaakt met THREE.BoxGeometry zouden voor alle zijden dezelfde lengte gebruiken.

JavaScript

//Creates scene and camera

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

//Creates renderer and adds it to the DOM

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

//The Box!

//BoxGeometry (makes a geometry)
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
//Material to apply to the cube (green)
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
//Applies material to BoxGeometry
var cube = new THREE.Mesh( geometry, material );
//Adds cube to the scene
scene.add( cube );

//Sets camera's distance away from cube (using this explanation only for simplicity's sake - in reality this actually sets the 'depth' of the camera's position)

camera.position.z = 5;

//Rendering

function render() {
  requestAnimationFrame( render );
  renderer.render( scene, camera );
}
render();

Let op de functie 'renderen'. Dit geeft de kubus 60 keer per seconde weer.

Volledige code (met HTML)

<!DOCTYPE html>
<html>
  
  <head>
    <title>THREE.BoxGeometry</title>
    <script src="http://threejs.org/build/three.js"></script>
  </head>

  <body>

    <script>
      //Above JavaScript goes here
    </script>

  </body>
  
</html>

balken

De var geometry = new THREE.BoxGeometry( 1, 1, 1 ); geeft ons een kubus. Om een kubus te maken, wijzigt u gewoon de parameters - deze bepalen respectievelijk de lengte, hoogte en diepte van de kubus.

Voorbeeld:

...
//Longer cuboid
var geometry = new THREE.BoxGeometry( 2, 1, 1 );
...

Meer (bewijzen dat de kubus driedimensionaal is)

De kubus lijkt misschien maar een vierkant te zijn. Om te bewijzen dat het zonder twijfel driedimensionaal is, voegt u de volgende coderegels toe aan de functie 'render':

...
cube.rotation.x += 0.05;
cube.rotation.y += 0.05;
...

En kijk hoe de vrolijke kubus ronddraait ... en rond ... en rond ...

Kleurrijk

Niet voor angsthazen ...

De uniforme kleur voor de hele kubus is ... groen. Saai. Om elk gezicht een andere kleur te geven, moeten we naar de gezichten van de geometrie graven.

var geometry = new THREE.BoxGeometry(3, 3, 3, 1, 1, 1);

/*Right of spawn face*/
geometry.faces[0].color = new THREE.Color(0xd9d9d9);
geometry.faces[1].color = new THREE.Color(0xd9d9d9);

/*Left of spawn face*/
geometry.faces[2].color = new THREE.Color(0x2196f3);
geometry.faces[3].color = new THREE.Color(0x2196f3);

/*Above spawn face*/
geometry.faces[4].color = new THREE.Color(0xffffff);
geometry.faces[5].color = new THREE.Color(0xffffff);

/*Below spawn face*/
geometry.faces[6].color = new THREE.Color(1, 0, 0);
geometry.faces[7].color = new THREE.Color(1, 0, 0);

/*Spawn face*/
geometry.faces[8].color = new THREE.Color(0, 1, 0);
geometry.faces[9].color = new THREE.Color(0, 1, 0);

/*Opposite spawn face*/
geometry.faces[10].color = new THREE.Color(0, 0, 1);
geometry.faces[11].color = new THREE.Color(0, 0, 1);

var material = new THREE.MeshBasicMaterial( {color: 0xffffff, vertexColors: THREE.FaceColors} );
var cube = new THREE.Mesh(geometry, material);

OPMERKING: De methode voor het kleuren van de gezichten is niet de beste methode, maar het werkt goed (genoeg).

Notes

Waar is het canvas in het hoofdgedeelte van het HTML-document?

Het is niet nodig om handmatig een canvas aan de body toe te voegen. De volgende drie regels

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

maak de renderer, het canvas en voeg het canvas aan de DOM.

THREE.CylinderGeometry

THREE.CylinderGeometry build cilinders.

Cilinder

In navolging van het vorige voorbeeld kan de code om het vak te maken worden vervangen door de onderstaande.

//Makes a new cylinder with
// - a circle of radius 5 on top (1st parameter)
// - a circle of radius 5 on the bottom (2nd parameter)
// - a height of 20 (3rd parameter)
// - 32 segments around its circumference (4th parameter)
var geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );
//Yellow
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
var cylinder = new THREE.Mesh( geometry, material );
scene.add( cylinder );

Om helemaal opnieuw te bouwen, hier is de code.

//Creates scene and camera

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

//Creates renderer and adds it to the DOM

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

//The Cylinder!

var geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );
//Yellow
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
var cylinder = new THREE.Mesh( geometry, material );
scene.add( cylinder );

//Sets camera's distance away from cube (using this explanation only for simplicity's sake - in reality this actually sets the 'depth' of the camera's position)

camera.position.z = 30;

//Rendering

function render() {
  requestAnimationFrame( render );
  renderer.render( scene, camera );
}
render();

Meer (bewijzen dat de cilinder driedimensionaal is)

De cilinder lijkt misschien gewoon ... tweedimensionaal te zijn. Om te bewijzen dat het zonder twijfel driedimensionaal is, voegt u de volgende coderegels toe aan de functie 'render':

...
cylinder.rotation.x += 0.05;
cylinder.rotation.z += 0.05;
...

En de gelukkige heldere cilinder zou willekeurig draaien, te midden van een donkere, zwarte achtergrond ...



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow