Saltar al contenido
Sistema Solar en Three.js: Aprendiendo Gráficos 3D Web

5 de enero de 2026

Sistema Solar en Three.js: Aprendiendo Gráficos 3D Web

Una simulación interactiva del sistema solar en 3D construida con Three.js y WebGL para explorar planetas, órbitas y renderizado en tiempo real en el navegador.

Projects Software
Three.js WebGL JavaScript

El Objetivo

Quería aprender gráficos 3D web — no a través de tutoriales, sino construyendo algo visual e interactivo. Un sistema solar parecía el proyecto perfecto: tiene órbitas (matemáticas), texturas (assets), iluminación (renderizado) e interactividad (controles de cámara).

Qué Hace

Una simulación interactiva del sistema solar ejecutándose completamente en el navegador:

  • Los 8 planetas orbitando el Sol con distancias y velocidades proporcionales
  • Texturas realistas — Mapas de texturas de la NASA aplicados a cada planeta
  • Iluminación dinámica — El Sol emite luz, los planetas proyectan sombras
  • Controles de cámara — Zoom, pan y rotación para explorar desde cualquier ángulo
  • Trayectorias orbitales — Órbitas elípticas visibles para cada planeta
  • Paneles de información — Haz clic en un planeta para ver datos y hechos

Aspectos Técnicos

// Crear un planeta con textura y órbita
function createPlanet(radius, texturePath, orbitRadius, orbitSpeed) {
  const geometry = new THREE.SphereGeometry(radius, 32, 32);
  const texture = new THREE.TextureLoader().load(texturePath);
  const material = new THREE.MeshPhongMaterial({ map: texture });
  const mesh = new THREE.Mesh(geometry, material);

  // Animación de órbita
  mesh.userData = { orbitRadius, orbitSpeed, angle: Math.random() * Math.PI * 2 };
  return mesh;
}

// Bucle de animación
function animate() {
  requestAnimationFrame(animate);
  planets.forEach(planet => {
    planet.userData.angle += planet.userData.orbitSpeed;
    planet.position.x = Math.cos(planet.userData.angle) * planet.userData.orbitRadius;
    planet.position.z = Math.sin(planet.userData.angle) * planet.userData.orbitRadius;
  });
  renderer.render(scene, camera);
}

Desafíos

  • Escala — El sistema solar real es imposiblemente grande. Usé escalado logarítmico para distancias y tamaños exagerados de planetas para mantener todo visible.
  • Rendimiento — Texturas de alta resolución y múltiples fuentes de luz pueden hundir los frames por segundo. La compresión de texturas y LOD (nivel de detalle) ayudaron.
  • Órbitas suaves — Conseguir órbitas elípticas keplerianas correctas (no solo círculos) requirió repasar mecánica orbital.

Lo Que Aprendí

  • Three.js abstrae WebGL de forma elegante, pero entender los conceptos subyacentes (shaders, buffers, pipelines de renderizado) sigue siendo esencial para depurar.
  • El patrón del bucle de animación (requestAnimationFrame) es la columna vertebral de cualquier aplicación web en tiempo real.
  • Las matemáticas están en todas partes en gráficos 3D — trigonometría para órbitas, álgebra lineal para transformaciones de cámara, física para movimiento realista.
  • Construir proyectos visuales es increíblemente motivante — cada pequeño cambio produce feedback inmediato y satisfactorio.

Pruébalo

El proyecto es open source: solar-system-threejs en GitHub