05 Capítulo 5 · Lección 2

Tu primera escena

Redactado por
Author Sebastian V.
Fecha de publicación

17/01/2026

Tiempo de lectura

8 min

Tema

Three.js

¿Qué es una Escena?

En el mundo del 3D, no hay nada hasta que tú lo declaras. El espacio es un vacío infinito. Una Scene (Escena) en Three.js es el contenedor principal, el universo mismo donde vivirán todos tus objetos, luces y cámaras.

Imagina un cuarto completamente oscuro. Hasta que no enciendas una luz o coloques un objeto dentro, el cuarto existe, pero no hay nada que ver. La escena es ese cuarto.

La Santísima Trinidad de Three.js

Para ver algo en la pantalla, SIEMPRE necesitas tres componentes fundamentales interactuando entre sí:

  1. Scene: El contenedor del mundo.
  2. Camera: Tus ojos, el punto de vista desde donde se graba el mundo.
  3. Renderer: La máquina de revelado que toma la escena y la cámara, y pinta los píxeles en el elemento <canvas> de HTML.

¿Cómo funciona?

El flujo de trabajo es sistemático. Primero, instancias la escena. Luego, instancias la cámara y la alejas un poco (porque por defecto nace en la coordenada [0,0,0], justo en el centro, y si pones un objeto ahí, la cámara estaría dentro de él). Finalmente, conectas el renderer a un elemento HTML de tu página y le ordenas: "¡Renderiza esto!".

El Bucle de Animación

Si solo renderizas una vez, obtienes una fotografía. Si quieres movimiento, necesitas un bucle de animación usando requestAnimationFrame. Es como decirle al navegador: "Toma una foto, muévela un poco, toma otra foto, rápido, ¡60 veces por segundo!".

Consejo profesional

Siempre separa la lógica de Three.js de tu estructura HTML. Mantén un contenedor limpio, como un div con id='canvas-container', y deja que tu script de Three.js inyecte el elemento canvas dinámicamente. Esto evita conflictos y mantiene tu HTML semántico.

La anatomía de una escena básica

> _
import * as THREE from 'three';

// 1. Escena
const scene = new THREE.Scene();

// 2. Cámara (FOV, Aspect Ratio, Near, Far)
const camera = new THREE.PerspectiveCamera(
  75, 
  window.innerWidth / window.innerHeight,
  0.1, 
  1000
);
camera.position.z = 5; // Alejamos la cámara

// 3. Renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Objeto (Cubo)
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x56C288 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// 4. Render Loop
function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}

animate();
> _

Tu primer 'Hola Mundo' en 3D.

Errores comunes

01
Pantalla en negro El error más común. Suele pasar porque olvidaste alejar la cámara (camera.position.z = 5) y estás renderizando desde dentro del cubo.
02
Cubo deformado Pasa si el "aspect ratio" de la cámara no coincide con las dimensiones del renderer.
03
Olvidar scene.add() Creaste el objeto perfecto, pero olvidaste decirle a la escena que lo incluyera. Si no está en la escena, el renderer no lo dibuja.

Practica lo aprendido

Construye paso a paso tu primera escena real.

01 Instancia la Scene, Camera y Renderer.
02 Agrega un cubo verde y aléjate de él moviendo la cámara en el eje Z.
03 Llama al método renderer.render(scene, camera) para ver el cubo estático.
04 Mete el render dentro de una función animate() con requestAnimationFrame.