Este contenido aún no está disponible en tu idioma. Mostrando la versión en inglés.
Principiante 10 min 1 / 20
Demo en vivo
Tutorial 1: Hello Cube
Nivel: Principiante
Tiempo estimado: 10 minutos
Qué aprenderás: Crear una escena mínima con un cubo 3D que rota usando@joroya/corey@joroya/renderer-three.
Prerrequisitos
- El monorepo clonado y con
pnpm installejecutado. - Los paquetes compilados (
pnpm build).
Paso 1: Setup del HTML
Crea un archivo HTML con un <canvas>:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Hello Cube EOroya Animate</title>
<style>
body { margin: 0; overflow: hidden; background: #1a1a2e; }
canvas { display: block; }
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script type="module" src="./main.ts"></script>
</body>
</html>
Paso 2: Crear la escena
import { Scene, Node, createBox, Material, Camera, CameraType } from '@joroya/core';
import { ThreeRenderer } from '@joroya/renderer-three';
// 1. Crear la escena
const scene = new Scene();
// 2. Agregar una cámara
const cameraNode = new Node('camera');
cameraNode.addComponent(new Camera({
type: CameraType.Perspective,
fov: 75,
aspect: window.innerWidth / window.innerHeight,
near: 0.1,
far: 1000,
}));
cameraNode.transform.position.z = 5;
scene.add(cameraNode);
// 3. Crear el cubo
const cube = new Node('my-cube');
cube.addComponent(createBox(1, 1, 1));
cube.addComponent(new Material({ color: { r: 0.2, g: 0.6, b: 1.0 } }));
scene.add(cube);
¿Qué está pasando?
Scenees el contenedor raíz del scene graph.Nodees un elemento del árbol. Cada nodo tiene unTransformautomático.createBox(1,1,1)crea un componente de geometría de caja de 1ÁEÁE.Materialdefine el color de la superficie (RGB normalizado: 0 a 1).Cameradefine el punto de vista desde donde se renderiza.
Paso 3: Inicializar el renderer y animar
// 4. Crear el renderer Three.js
const renderer = new ThreeRenderer({
canvas: document.getElementById('canvas') as HTMLCanvasElement,
width: window.innerWidth,
height: window.innerHeight,
});
renderer.mount(scene);
// 5. Loop de animación
let angle = 0;
function animate() {
angle += 0.01;
// Rotar el cubo usando quaternion simplificado (rotación en Y)
cube.transform.rotation = {
x: 0,
y: Math.sin(angle / 2),
z: 0,
w: Math.cos(angle / 2),
};
cube.transform.updateLocalMatrix();
renderer.render();
requestAnimationFrame(animate);
}
animate();
Conceptos clave
transform.rotationusa quaterniones{ x, y, z, w }. Para rotar en el eje Y, usamossin(θ/2)ycos(θ/2).updateLocalMatrix()recalcula la matriz local a partir de position/rotation/scale.renderer.render()actualiza las matrices del mundo y dibuja el frame.
Resultado
Un cubo azul brillante rotando suavemente sobre fondo oscuro.
Código completo
import { Scene, Node, createBox, Material, Camera, CameraType } from '@joroya/core';
import { ThreeRenderer } from '@joroya/renderer-three';
const scene = new Scene();
const cameraNode = new Node('camera');
cameraNode.addComponent(new Camera({
type: CameraType.Perspective,
fov: 75,
aspect: window.innerWidth / window.innerHeight,
near: 0.1,
far: 1000,
}));
cameraNode.transform.position.z = 5;
scene.add(cameraNode);
const cube = new Node('my-cube');
cube.addComponent(createBox(1, 1, 1));
cube.addComponent(new Material({ color: { r: 0.2, g: 0.6, b: 1.0 } }));
scene.add(cube);
const renderer = new ThreeRenderer({
canvas: document.getElementById('canvas') as HTMLCanvasElement,
width: window.innerWidth,
height: window.innerHeight,
});
renderer.mount(scene);
let angle = 0;
function animate() {
angle += 0.01;
cube.transform.rotation = {
x: 0,
y: Math.sin(angle / 2),
z: 0,
w: Math.cos(angle / 2),
};
cube.transform.updateLocalMatrix();
renderer.render();
requestAnimationFrame(animate);
}
animate();
Siguiente tutorial
ↁETutorial 2: Paleta de Colores Emúltiples formas y colores.