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

178
Vistas
¿Cómo establecer la dirección de avance usando la matriz lookAt?

Tengo una escena WebGL 3D configurada con una sola malla y una cámara. Puedo traducir/rotar ambos correctamente (al menos eso parece en las pruebas).

Ahora me gustaría poder establecer la dirección 'hacia adelante' de la transformación de mi malla.

Sin mucha idea, he probado esto:

 // _value being a 3-component direction such as [ 0, 0, 1 ] // V4.up being the world up vector: [ 0, 1, 0 ] set forward(_value) { const p = V4.add(this.position, _value); const m = M4.lookAt(this.position, p, V4.up); this.rotation = M4.transform(m, this.rotation); }

Cuando la malla está en [ 0, 0, 0 ] (origen), parece que no hace nada. Cuando la malla no está en el origen, gira rápidamente en los tres ejes con velocidad creciente a medida que me alejo del origen.

EDITAR: Me di cuenta de que estaba pasando un vector de dirección a .lookAt. Ahora modifiqué el método anterior para convertir esa dirección en una posición (p), desplazada desde la posición de la transformación. Sin embargo, esto todavía da como resultado el mismo problema de giro que antes.

Mi matriz lookAt se ve así;

 lookAt(_from, _to, _up) { const fwd = V4.normalize(V4.sub(_from, _to)); const right = V4.cross(_up, fwd); return [ right[0], right[1], right[2], 0, _up[0], _up[1], _up[2], 0, fwd[0], fwd[1], fwd[2], 0, _from[0], _from[1], _from[2], 1 ]; }

(Actualmente estoy usando el inverso de esta matriz lookAt para obtener (aparentemente) una representación correcta de la cámara).

En mi sombreador, configuro gl_Position así;

 void main() { gl_Position = projectionMatrix * viewMatrix * worldMatrix * vertexPosition; }

En mi clase Transform, puedo obtener la dirección de avance así;

 get forward() { return V4.normalize(M4.transform(M4.rotate(this.rotation), V4.forward)); }

Nota; V4 es mi clase de operaciones vector4. M4 es mi clase de operaciones matriciales. Nota; V4.adelante = [ 0, 0, 1 ];

EDIT 2: ahora he intentado usar glMatrix en lugar de mi propia clase M4 para ver si había problemas con la mía. Obtengo exactamente los mismos resultados con ambos.

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