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

176
Visualizações
¿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 à 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