Es/Cómo configurar ventanas de vistas de cámara

From FlightGear wiki
Jump to navigation Jump to search
Ver también CompositeViewer Support y Canvas_Development#Supporting_Cameras
$FG_ROOT/Docs/README.multiscreen [1]

Este artículo describe cómo configurar ventanas de vistas de cámara para sistemas con más de un monitor. Las características de múltiples vistas de FlightGear son muy poderosas y es asombroso lo rápido que van las cosas en hardware medio o incluso más bajo.

Modos principales de operación

El sistema de vistas de cámara configurable por XML de FlightGear soporta dos modos mayores de operación:

  1. Si tienes múltiples monitores conectados a tu ordenador y los configuras como pantallas independientes (es decir, no puedes arrastrar una ventana de uno a otro lado entre monitores y no puedes crear una ventana que se extienda por múltiples monitores) entonces puedes configurar FlightGear para abrir una ventana separada en cada pantalla y dibujar una perspectiva de vista única en cada ventana (y si quieres puedes configurar FlightGear para abrir múltiples ventanas en una sola pantalla).
  2. Si tienes múltiples monitores conectados a una pantalla virtual mayor, puedes configurar FlightGear para abrir una gran ventana que se extienda por todas tus pantallas, pero entonces separar esa gran ventana en cámaras individuales y dibujar aún una perspectiva única en cada pantalla.

Adicionalmente, cada vista es altamente configurable, sin importar cómo están configuradas tus pantallas.

  • Puedes configurar un campo de visión distinto para cada pantalla, de tal forma que puedes crear un mundo exterior sin costuras con diferentes tamaños de monitor.
  • Si lo deseas, puedes definir cada vista en términos de los parámetros del frustum de la vista a bajo nivel, por lo que puedes medir con cautela tu disposición de monitores/pantallas y configurar cada vista para ajustarse a tu disposición física con exactitud, incluyendo frustums de vistas asimétricos si es necesario. Por el contrario, aún puedes definir tus vistas en términos de un esquema de campo de visión horizontal/vertical más simple (pero menos flexible).
  • Puedes especificar el desplazamiento horizontal y vertical desde el centro de cada pantalla. Esto te permite desplegar tus monitores para tener en cuenta el espacio físico entre monitores. Esto te permite crear un mundo virtual con menos costuras donde las líneas de las pistas y las líneas horizontales comiencen en el sitio correcto en el siguiente monitor cuando salgo por fuera del borde del primero. Imagina coger un gran poster, cortarlo en pedazos y después separar los pedazos entre sí un poco. Ninguna de las líneas rectas de la imagen original pasarán rectas en la versión separada/alargada. Ahora imagina coger esa misma imagen y cortarla en tiras, pero dejando las secciones donde estaban originalmente. Las líneas rectas se conservarán entre pedazos adyacentes. De esto es de lo que trata.

Casos de uso

  • ATI (el ATI que hace tarjetas y chips gráficos) usó una versión simplificada (pre-release) de esta característica para mostrar 8 pantallas desde un solo ordenador en SigGraph este año.
  • Introduce el Matrox Triple Head to Go (haz una búsqueda en Google si no has oído hablar de ello). Es solo una pequeña caja, pero conectada al ordenador parece como un monitor gigante el triple de trande. Se conecta a un lado de tu ordenador y, en el otro lado, conectas 3 monitores reales. Así tienes 3 monitores sin que tu ordenador necesite saber nada sobre ellos e incluso en tarjetas de video con solo un conector externo para pantallas (como un portátil). Usando el segundo modo de operación descrito arriba yo dividí mi gran ventana única en 3 vistas de cámara y fui capaz de dibujar un campo de visión de alrededor de 120 grados en 3 pantallas.

Cambios requeridos en preferences.xml

Nota  Los cambios en preferences.xml sugeridos aquí es mejor que sean añadidos a un fichero XML personal que pueda ser invocado con la opción de línea de comandos --config=path-to-your-config.xml. Para detalles sobre por qué y cómo ver FlightGear configuration via XML#Adding your own settings.

A partir de la versión 1.9, FlightGear usa OpenSceneGraph (OSG) para renderizar el escenario. OSG ya tiene una implementación para configurar diferentes cámaras en la escena y están configuradas en $FG ROOT/preferences.xml.

Las cámaras esclavas son creadas usando propiedades en preferences.xml. Una esclava es siempre creada alineada con los parámetros de la vista de la cámara maestra. Pueden ser abiertas otras en diferentes ventanas de gráficos, posiblemente en otras pantallas. En este momento una cámara esclava es creada en su propia ventana. Cerrar cualquiera de las ventanas cerrará FlightGear en su cojunto.

Los parámetros para la esclava son actualmente bastante limitados. Incluyen:

  • Las dimensiones y posición de la ventana.
  • Valores de "shear" en el espacio de la proyección.
  • 'heading-deg" (un desplazamiento de la orientación que fue añadido específicamente para LinuxTag).

Los valores shear-x y shear-y realmente solo son útiles para establecer una pantalla tipo "video wall" donde los monitores dispuestos alrededor del "master view" muestran una vista en un frustum de desplazamiento con la misma relación de aspecto y campo de visión que el maestro.

Miremos primero un ejemplo, configurando dos ventanas extra. Añade algo como el siguiente código a la sección <rendering> de tu fichero preferences.xml:

   <camera>
    <host-name type="string"></host-name>
    <display>0</display>
    <screen>0</screen>
    <shear-x>2</shear-x>
    <shear-y>1</shear-y>
    <width>320</width>
    <height>240</height>
    <fullscreen type="bool">false</fullscreen>
   </camera>
   <camera>
    <host-name type="string"></host-name>
    <display>0</display>
    <screen>0</screen>
    <shear-x>-2</shear-x>
    <shear-y>1</shear-y>
    <width>320</width>
    <height>240</height>
    <fullscreen type="bool">false</fullscreen>
   </camera>

Para simplificar el mantenimiento puedes también guardar estas modificaciones en un fichero XML PropertyList separado (en esencia el nodo XML de mayor nivel debe llamarse "PropertyList") y simplemente referenciarlo en preferences.xml haciendo uso del atributo incluido en la sección <rendering>.

Preferences.xml se parecerá a esto:

  <rendering include="camera-views.xml">
  ...
  </rendering>

Y un fichero camera-views.xml que vaya a ser creado tendrá el siguiente contenido:

 <?xml version="1.0"?>
 <PropertyList>
   <camera>
    <host-name type="string"></host-name>
    <display>0</display>
    <screen>0</screen>
    <shear-x>2</shear-x>
    <shear-y>1</shear-y>
    <width>320</width>
    <height>240</height>
    <fullscreen type="bool">false</fullscreen>
   </camera>
   <camera>
    <host-name type="string"></host-name>
    <display>0</display>
    <screen>0</screen>
    <shear-x>-2</shear-x>
    <shear-y>1</shear-y>
    <width>320</width>
    <height>240</height>
    <fullscreen type="bool">false</fullscreen>
   </camera>
 </PropertyList>


Related content

Finalmente, mejor te apartas de correr una instancia de FlightGear en el segundo monitor y hacerla esclava. La idea general detrás de tener una configuración de múltiples pantallas como twinview es que replique un área continua sin límites. Poner esos límites de las pantallas de nuevo cuando el subsistema de video ha trabajado tan duro para eliminarlos es una colisión metafórica y un problema de diseño (ver Property Tree/Native Protocol Slaving).

Artículos Wiki

Hilos de la lista de correo

Fichero Readme

Enlaces externos