Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

208
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda