estoy escribiendo mi propia impresora de trama de software en Java, y me encontré con algunos problemas con él ... echar un vistazo a una imagen de muestra, por favor:Proyección de perspectiva: ¿cómo proyecto los puntos que están detrás de 'cámara'?
Esta muestra simplemente dibujar cuadrícula sencilla en un avión. Todo funciona bien hasta que muevo la cámara lo suficientemente cerca para que algunos puntos se muevan detrás de ella. Después de eso, ya no se proyectan correctamente, como puede ver (líneas verticales: los puntos que deben estar detrás de la cámara se proyectan en la parte superior de la pantalla).
Mis matrices de transformación y vectores son los mismos que DirectX usa (PerspectiveFovLH para proyección, LookAtLH para cámara).
estoy usando siguiente método de transformación para proyectar puntos 3D:
- vector 3D para ser transformados se crea.
- El vector se multiplica por la matriz ViewProjection.
Después de eso, el punto se transforma en la pantalla utilizando el método siguiente:
// 'vector' is input vector in projection space // projection to screen double vX = vector.x/vector.z; double vY = vector.y/vector.z; //translate //surfaceW is width and surfaceH is height of the rendering window. vX = ((vX + 1.0f)/2.0f) * surfaceW; vY = ((-vY + 1.0f)/2.0f) * surfaceH; return new Vector3(vX, vY, vector.z);
Como he dicho antes, que funciona bien hasta que punto se mueve detrás de la cámara. El hecho es que puedo averiguar cuándo el punto está detrás de la cámara (probando su valor Z después de la transformación final), pero como dibujo líneas y otros objetos basados en líneas, no puedo omitir ese punto.
Luego intenté configurar mi canalización de transformación de acuerdo con El artículo de Direct3D Transformation Pipeline en MSDN.
Lamentablemente, no he tenido suerte con eso (los mismos resultados), por lo que cualquier ayuda sería muy apreciada, ya que estoy un poco atrapado en esta.
Gracias.
Best Regards, Alex
¿Está configurando correctamente el plano de recorte frontal de su cámara? Y luego tenerlo en cuenta cuando renderizas? – ChrisF
Mi plano zNear se establece en 1 y el plano zFar en 1000 unidades. Intenté cambiar los valores, pero el problema persiste. ¿Alguna sugerencia? – Alex
Ha pasado un tiempo desde que hice este tipo de cosas, pero debe realizar una intersección con el plano de recorte frontal * antes * de proyectar la línea. – ChrisF