Camera vs Viewport

23

No tengo una comprensión clara de cuál es precisamente la diferencia entre las coordenadas de la cámara y las coordenadas de la ventana gráfica. ¿Alguien puede aclarar?

Code Vader
fuente

Respuestas:

40

La cámara es como una cámara con la que se filma la película de Batman. Existe en un mundo virtual y se puede mover, apuntando a diferentes escenas, cambiando la distancia focal y otras propiedades de la cámara. Puede tener muchas cámaras y cambiar entre ellas. Incluso puedes filmar en varias cámaras a la vez.

Las coordenadas típicas de la cámara son: posición en el mundo virtual, dirección de orientación, vector ascendente, campo de visión, etc.

Viewport es una pantalla de cine. Es un lugar donde se muestra la imagen grabada por la cámara. En el mundo de las PC, es un área en la pantalla dentro de alguna ventana o una imagen de pantalla completa. Puede mostrar transmisiones desde varias cámaras a la vez (como en los juegos de carreras de consola entre 2-4 jugadores).

Las coordenadas típicas de la ventana gráfica son: posición en la pantalla, altura y ancho.

Kromster dice que apoya a Mónica
fuente
0

Las coordenadas de la ventana gráfica son las coordinadas donde se coloca en la pantalla. (Por ejemplo, dentro de una ventana win32).

Las coordenadas de la cámara son la posición de la cámara DENTRO de la ventana gráfica, que está dentro del espacio 2D / 3D que configuró en su aplicación OpenGL. La cámara no puede salir de esa ventana porque está en el espacio que configuró donde opengl puede hacer su trabajo, dentro de una ventana Win32.

Seca
fuente
Eso no es del todo exacto. La ventana gráfica define la asignación del espacio NDC al espacio de ventana para la transformación de vértices. En versiones anteriores de GL, esa asignación también se aplicaba a la transformación de posición ráster (pero eso se ha eliminado). Sin embargo, hay muchas operaciones GL que no están restringidas por la transformación de vértices y, por lo tanto, puede hacer cosas como borrar el búfer de color fuera de la ventana gráfica. De hecho, la única manera de restringir un buffer a una región específica del framebuffer es usar una cosa completamente diferente, llamada caja de tijera ( glScissor (...)).
Andon M. Coleman