Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
Cómo simular caminar sobre una esfera en three.js

Estoy usando three.js para escribir un juego con física como Super Mario Galaxy, donde los jugadores pueden caminar en pequeños planetas esféricos. Al caminar hacia adelante alrededor de la esfera, el movimiento del jugador tiende a desviarse hacia la izquierda o hacia la derecha alrededor del eje Y global.

Comienzo calculando el vector ascendente de la cámara del jugador, que es opuesto a la dirección del jugador hacia la esfera.

 camera.up.copy(sphere.position); camera.up.sub(camera.position); camera.up.normalize(); camera.up.multiplyScalar(-1);

A continuación, uso el ángulo entre eso y el vector ascendente global para generar un cuaternión que representa la orientación general del jugador.

 // GLOBAL_UP is (0,1,0) XYZ target_quaternion.setFromUnitVectors(GLOBAL_UP, camera.up);

Luego, para evitar tartamudear el movimiento, uso la siguiente función para rotar la orientación de los jugadores hacia el objetivo gradualmente con el tiempo. También utilizo las coordenadas del mouse para generar controls.quaternion , que es la dirección de mirada real de la cámara. Esto se multiplica con la orientación para formar el cuaternión de cámara final.

 orientation.rotateTowards(target_quaternion, speed * delta); camera.quaternion.copy(orientation); camera.quaternion.multiply(controls.quaternion);

Lo que encuentro es que funciona principalmente, pero a medida que el producto escalar de GLOBAL_UP y camera.up se acerca a +/- 1 (lo que significa que camera.up se acerca al eje Y global), el jugador comienza a girar hacia el eje cuando intenta ir directamente. Cuando intentas cruzar el eje, te da vueltas repetidamente en un círculo. Creo que esto podría deberse a mi uso de rotateTowards , pero no estoy seguro de cómo cancelar las rotaciones no deseadas.

Puedes ver el código completo aquí . Cualquier ayuda es apreciada.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda