Hola Mundo en ThreeJS

Hola Mundo en ThreeJS

Etiquetas: ThrreJS PointLight WebGLRenderer CubeGeometry

Hola Mundo en ThreeJS

Este ejemplo de ThreeJS va a ser el primero de una serie sobre esta librería. ThreeJS es un motor de 3D para Javascript, "parecido" a Papervision o Away3D para Actionscript.

Podéis bajar ThreeJS de aquí: THREEJS

Dentro de la descarga de ThreeJS viene una carpeta de ejemplos y varios JS adjuntos, como el Detector.js (para ver capacidades del navegador y mostrar mensajes en caso de que alguna funcionalidad no esté disponible).

En este primer ejemplo veremos cual es la estructura básica de una escena 3D y creamos un cubo.

Podéis ver el ejemplo en movimiento en el siguiente enlace:

VER EJEMPLO EN MOVIMIENTO

y el código comentado tras el salto.

  1.  
  2. /*
  3. 	Aquí comprobamos con la clase Detector si el navegador soporta WebGL. 
  4. 	Si no lo soporta se muestra un mensaje predeterminado. 
  5. */
  6. if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
  7.  
  8. /*
  9. 	Esta variable la utilizamos para mostrar el rendimiento de lo aplicación en tiempo real. 
  10. */
  11. var stats;
  12.  
  13. /*
  14. 	Variables generales de la escena 3d.
  15. 	-renderer: objeto que renderiza todos los objetos de la escena teniendo en cuenta el punto de vista de la cámara
  16. 	-scene: objeto que contiene todos los objetos 3d de la escena. 
  17. 	-camera: objeto situado en la escena (posición/rotación) con un campo de visión a través del que se ven los objetos
  18. */
  19. var renderer, scene, camera;
  20.  
  21. /*
  22. 	object: aquí almacenaremos el cubo que vamos a crear
  23. 	material: material con el que vamos a crear el cubo
  24. */
  25. var object;
  26. var material;
  27.  
  28. init();
  29. animate();
  30.  
  31. function init() {
  32.  
  33. 	//Creamos la escena
  34. 	scene = new THREE.Scene();
  35.  
  36. 	/*
  37. 		Creamos la cámara. El constructor es: function ( fov, aspect, near, far )
  38.  
  39. 		-fov: field of view, ángulo de visión de la cámara
  40. 		-aspect: aspect ratio de la cámara
  41. 		-near, far: visión mínima y máxima de la cámara
  42.  
  43. 		una vez creada la cámara la añadimos a la escena. 
  44.  
  45. 	*/
  46. 	camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 );
  47. 	camera.position.z = 100;
  48.  
  49. 	scene.add(camera);
  50.  
  51. 	/*
  52. 		Creamos el material. En esta ocasión es uno de tipo MeshLambertMaterial, que admite luces
  53. 	*/
  54. 	material = new THREE.MeshLambertMaterial({
  55.       	color: 0xff3426
  56.       });
  57.  
  58. 			/*
  59. 		Creamos un nuevo objeto de tipo Mesh. La clase Mesh recibe dos parámetros: 
  60. 		-geometría: un cubo, un plano, etc...
  61. 		-material: el material que vamos a utilizar para "vestir" nuestra geometría
  62.  
  63. 		En este caso como primer parámetro hemos creado un cubo. El constructor del cubo tiene el siguiente formato: 
  64. 		function ( width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides ) {
  65. 		-width, height, depth: ancho, alto y profundidad  del cubo.
  66. 		-segmentsWidth, segmentsHeight, segmentsDepth: número de segmentos de cada cara
  67. 		-materials: materiales (opcional)
  68. 	*/
  69. 	object = new THREE.Mesh(new THREE.CubeGeometry(20,5,10,4,4,4),material);
  70. 	scene.add( object );
  71. 	/*
  72. 		Punto de luz que añadimos y colocamos en la escena. Hay varios tipos de luces, PointLIghts, AmbientLight, SpotLight, etc...
  73. 	*/
  74. 	var pointLight = new THREE.PointLight(0xFFFFFF);
  75. 	pointLight.position.x = 10;
  76. 	pointLight.position.y = 50;
  77. 	pointLight.position.z = 130;
  78. 	scene.add(pointLight);
  79.  
  80. 	/*
  81. 		Hay varios tipos de renderer que veremos en otros post. En este caso hemos creado un renderer WebGL para la escena.
  82. 		Los dos parámetros que pasamos son el color de fondo y su opacidad. 
  83. 	*/
  84. 	renderer = new THREE.WebGLRenderer( { clearColor: 0xcccccc, clearAlpha: 1 } );
  85. 	renderer.setSize( window.innerWidth, window.innerHeight );
  86.  
  87. 	/*
  88. 		Por último añadimos el renderer a nuestro documento y añadimos la ventana de estadísticas
  89. 	*/
  90.  
  91. 	var container = document.getElementById( 'container' );
  92. 	container.appendChild( renderer.domElement );
  93. 	stats = new Stats();
  94. 	stats.domElement.style.position = 'absolute';
  95. 	stats.domElement.style.top = '0px';
  96. 	container.appendChild( stats.domElement );
  97. 	window.addEventListener( 'resize', onWindowResize, false );
  98. }
  99.  
  100. /*
  101. 	Función que se ejecuta en cada fotograma. Desde ella renderizamos la escena (render()) y actualizamos estadísticas
  102. */
  103. function animate() {
  104. 	requestAnimationFrame( animate );
  105. 	render();
  106. 	stats.update();
  107. }
  108.  
  109. /*
  110. 	Rotamos el objeto y le decimos al renderer que actualice lo que está pasando en escena
  111. */
  112. function render() {
  113. 	object.rotation.y += .01;
  114. 	object.rotation.x += .015;
  115. 	renderer.render( scene, camera );
  116. }
  117.  
  118. /*
  119. 	Si la ventana se reescala, actualizamos el aspect ratio de la cámara y el tamaño del renderer. 
  120. */
  121. function onWindowResize() {
  122. 	camera.aspect = window.innerWidth / window.innerHeight;
  123. 	camera.updateProjectionMatrix();
  124. 	renderer.setSize( window.innerWidth, window.innerHeight );
  125. }
  126.  
Comentarios

    No hay comentarios

Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: