sirve que para lookat iluminacion glortho ejemplos camara opengl opencv graphics matrix computer-vision

que - opengl 3d ejemplos



Cómo crear una matriz de proyección en perspectiva, puntos focales dados y centro principal de la cámara (4)

Logré adquirir los parámetros intrínsecos y extrínsecos de la cámara usando OpenCV, por lo tanto tengo fx, fy, cx y cy. Y también tengo el ancho y alto de la pantalla / imagen.

Pero, ¿cómo creo una matriz de proyección de perspectiva OpenGL a partir de estos parámetros?

glFrustrum muestra cómo crear una matriz de proyección, dado Z cerca, Z lejos y el ancho y alto de la imagen. Pero, ¿cómo incluyo los puntos focales y los centros de cámara en esta matriz?


En relación con la respuesta de AldurDisciple, esta es la formulación que debe usar si se elige el marco de coordenadas del mundo con el eje z invertido

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix GLdouble perspMatrix[16]={2*fx/w,0,0,0,0,2*fy/h,0,0,2*(cx/w)-1,2*(cy/h)-1,-(far+near)/(far-near),-1,0,0,-2*far*near/(far-near),0}; glMultMatrixd(perspMatrix);


Open GL opera con un frustum que está relacionado con la proyección en perspectiva con algunos límites en profundidad, referidos como valores cercanos y lejanos. Imagina una pirámide que se encuentra de lado, esto es un tronco. Otra analogía es un haz de proyector que se extiende en su anchura y altura con la distancia, esto también es un tronco. Así que a la derecha, a la izquierda, abajo y arriba están las coordenadas de su imagen, mientras que cerca y lejos están sus límites de profundidad con el plano más cercano a su plano focal . OpenGL colocará Cx y Cy en el centro del plano de la imagen para que puedas omitirlos. La forma alternativa y más natural de especificar el frustum se basa en el ángulo de visión o el campo de visión (es típico de 50 a 60 grados); la función a la que llama es glPerspective() donde todavía tiene cerca y lejos, pero en lugar de tamaños, especifique el ángulo y la relación de aspecto. Buena suerte.



Aquí está el código para obtener la matriz de proyección OpenGL equivalente a una cámara de visión artificial con matriz de cámara K=[fx, s, cx; 0, fy, cy; 0, 0, 1] K=[fx, s, cx; 0, fy, cy; 0, 0, 1] K=[fx, s, cx; 0, fy, cy; 0, 0, 1] y tamaño de imagen [W, H] :

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix GLdouble perspMatrix[16]={2*fx/W,0,0,0,2*s/W,2*fy/H,0,0,2*(cx/W)-1,2*(cy/H)-1,(zmax+zmin)/(zmax-zmin),1,0,0,2*zmax*zmin/(zmin-zmax),0}; glMultMatrixd(perspMatrix);

NB: zmin y zmax representan los planos de recorte Z cercanos y lejanos. Esta formulación asume que el marco de coordenadas mundiales OpenGL se elige de la siguiente manera:

Se supone que la cámara OpenGL está ubicada en el origen, mirando hacia el eje Z positivo, con un vector hacia abajo colineal y hacia el eje Y positivo.