Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
¿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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!