Pregunta

Estoy usando LMC para gestionar la matemáticas 3D en un proyecto de interfaz basada en OpenGL que estoy haciendo para el trabajo . Necesito saber la anchura del tronco de cono de visión a una distancia dada desde el punto ojo, que se mantiene como una parte de una matriz de 4x4 que representa la cámara. Mi objetivo es objetos posición GUI lo largo del borde aparente de la ventana gráfica, pero a cierta distancia en la pantalla del plano de delimitación cercano.

CML tiene una función para extraer los planos del tronco de cono, dándoles vuelta en Ax + By + Cz + D = 0 formulario. Este tronco de cono es perpendicular a la cámara, que no está necesariamente alineado con el eje z de la proyección de perspectiva.

Me gustaría extracto de coordenadas x e z a fin de precisar los elementos gráficos a los lados de la pantalla a diferentes distancias de la cámara. ¿Cuál es la mejor manera de ir haciendo sobre él?

Gracias!

¿Fue útil?

Solución

Esto parece ser un duplicado de Finding longitud lateral de una sección transversal de una pirámide truncado / truncado pirámide , si ya tiene una sección transversal de anchura conocida una distancia conocida desde el vértice. Si usted no tiene eso y desea obtener la respuesta por ti mismo, puede seguir estos pasos.

  1. Tome dos planos adyacentes y encontrar su línea de L1 intersección. Tú Puede utilizar los pasos aquí . De Verdad lo que necesita es la dirección vector de la línea.
  2. Tome dos planos, uno más de la misma como en el paso anterior, y encontrar su línea de L2 intersección.
  3. Tenga en cuenta que todos los planos de la forma Ax + By + Cz + D = 0 Ir a través del origen, para que sepa que L1 y L2 se cruzan.
  4. se dibuja una imagen de la vectores de dirección para L1 y L2, colas en el origen. Estos forman una ángulo; llamarlo theta. Encuentra theta utilizando la fórmula para el ángulo entre dos vectores, por ejemplo, aquí .
  5. Dibuje una bisectriz de ese ángulo. Dibujar una perpendicular a la bisectriz en la distancia d que desee de la origen (esto crea un isósceles triángulo, dividido en dos en dos congruentes los triángulos rectángulos). los longitud de la perpendicular es su anchura tronco deseada w. Tenga en cuenta que es w dos veces la longitud de una de las bases de los triángulos rectángulos.
  6. Sea r la longitud de la hipotenusa de los triángulos rectángulos. Entonces r cos (theta / 2) = d y r sin (theta / 2) = w / 2, por lo tan (theta / 2) = (w / 2) / d que implica w = 2d * tan (theta / 2). Puesto que usted sabe d y theta, ya está resuelto.

Tenga en cuenta que hemos encontrado la longitud de un lado de una sección transversal de un tronco. Esto funciona con cualquier sección transversal perpendicular de cualquier tronco. Esto se puede ampliar para adaptarlo a una sección transversal no perpendicular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top