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

297
Views
¿Cómo convertir coordenadas de NDC a espacio de cámara en vertex shader?

Mantengo un sombreador de vértices encapsulado en una clase de material personalizada (heredada de ShaderMaterial pero ahora de MeshStandardMaterial ) que convierte las coordenadas 3D en NDC como de costumbre:

 vec4 ndcPos = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); ndcPos /= ndcPos.w; //...other transformations to ndcPos

luego se aplica un conjunto de transformaciones a ndcPos . Como puede ver, se aplican en el espacio NDC. Necesito llevar la coordenada resultante al espacio de la cámara (ojo), así que supongo que debemos invertir los pasos, algo como esto:

 vec4 mvPos = ndcPos * ndcPos.w; mvPos *= inverse of projectionMatrix;

Resultado esperado: mvPos solo tiene aplicada la transformación modelView.

Preguntas:

  1. ¿Es eso correcto?
  2. ¿Cómo calcular el inverso de la matriz de projectionMatrix ? Sería fácil y económico pasar camera.projectionMatrixInverse como uniforme al sombreador de vértices, pero no encontré la manera de hacerlo en three.js: ni las clases de material ancestral ni onBeforeCompile pueden acceder a la cámara.
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La operación inversa para calcular la posición del espacio de vista es

 vec4 p = inverse(projectionMatrix) * ndc; vec4 mvPos = p / pw;

y la operación inversa para calcular la posición del objeto es

 vec4 p = inverse(projectionMatrix * modelViewMatrix) * ndc; vec4 pos = p / pw;

(Tenga en cuenta que en el código anterior, pos corresponde a la position del atributo y mvPos corresponde a la position * modelViewMatrix ).

Nota: si transforma una coordenada cartesiana con una matriz de proyección de perspectiva (o matriz de proyección de perspectiva inversa), el resultado es una coordenada homogénea . Para convertir una coordenada homogénea en una coordenada cartesiana, debe realizar una división de perspectiva (después de la división de perspectiva, el componente w es 1).
Cabe mencionar que la función inverse existe solo desde GLSL ES 3.00 (WebGL 2.0) y no está disponible en GLSL ES 1.00 (WebGL 1.0). Por lo que puede ser necesario calcular la matriz inversa en Javascript y pasarla como variable uniforme al shader.

about 4 years ago · Santiago Trujillo Report
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!