2010-01-07 9 views
8

J'ai été mis au défi avec un projet d'application C++ 3D qui utilisera 3 affichages, chacun d'un rendu provenant d'une caméra différente.Application 3D multi-écrans

Récemment, j'ai appris sur Ogre3D mais il n'est pas clair si elle prend en charge la sortie de différentes caméras à différents affichages/GPU.

Quelqu'un at-il une expérience avec une configuration similaire et Ogre ou un autre moteur?

Répondre

3

Au moins sur la plupart des systèmes (par exemple, Windows, MacOS), le système de fenêtrage crée un bureau virtuel, avec différents moniteurs mappés à différentes parties du bureau. Si vous le souhaitez, vous pouvez (par exemple) créer une grande fenêtre qui couvrira les trois écrans. Si vous définissez cette fenêtre pour utiliser OpenGL, presque tout ce qui utilise OpenGL (y compris certainement Ogre3D) fonctionnera très bien, bien que dans certains cas produire une telle résolution de sortie peut taxer la carte graphique au point que c'est un peu plus lent que d'habitude .

Si vous voulez traiter une fenêtre séparée sur chaque affichage, les choses peuvent être un peu plus complexes. OpenGL lui-même ne définit pas comment gérer l'affichage dans plusieurs fenêtres (même s'il tente de le faire) - cela dépend d'un ensemble de fonctions spécifiques à une plate-forme. Sous Windows, par exemple, vous avez un contexte de rendu pour chaque fenêtre, et vous devez utiliser WGLMakeCurrent pour choisir le contexte de rendu dans lequel vous dessinez à un moment donné.

Si la mémoire est bonne, le port Windows de Ogre3D prend en charge plusieurs contextes de rendu, ce qui ne devrait pas poser de problème non plus. Je m'attendrais à ce qu'il puisse fonctionner avec plusieurs fenêtres sur d'autres systèmes, mais je ne l'ai pas utilisé sur d'autres systèmes, donc je ne peux pas le dire avec certitude.

Je pense tout de suite que le support du triple moniteur sera presque sans conséquence sur l'effort global de développement. Bien sûr, cela signifie que vous (pouvez dire à votre patron) besoin d'une configuration triple moniteur pour le développement et les tests, ce qui n'est certainement pas une mauvaise chose! :-)

Modifier: OpenGL lui-même ne spécifie rien sur les fenêtres plein écran par rapport aux fenêtres normales. Si la mémoire sert, au moins sur Windows pour obtenir une application en plein écran, vous utilisez ChangeDisplaySettings avec CDS_FULLSCREEEN. Après cela, il traite essentiellement le bureau virtuel entier comme une seule fenêtre. Je ne me souviens pas d'avoir fait cela avec plusieurs moniteurs, donc je ne peux pas en dire beaucoup avec une grande certitude.

+0

Bonjour Jerry, merci de votre réponse. Ce n'est pas nécessairement une fenêtre séparée pour chaque affichage, car il doit être en plein écran sur chaque affichage (je ne suis pas sûr si ce type de sortie dépend d'une fenêtre ou contourne le système de fenêtrage). Quel est ton opinion? – user16120

+0

Même chose pour LINUX: si vous utilisez plusieurs moniteurs, vous utilisez généralement Xinerama, ce qui crée un énorme écran virtuel. – Tilo

3

Il y a plusieurs choses à dire sur le support multi-têtes dans le cas de OGRE3D. Dans mon expérience, une solution de travail est d'utiliser la version source de Ogre 1.6.1 et d'appliquer this patch. En utilisant ce correctif, les utilisateurs ont réussi à rendre une application Ogre sur un 6 monitors configuration.

Personnellement, j'ai appliqué ce correctif avec succès et je l'ai utilisé avec le StereoManager plugin pour raccorder des applications Ogre avec un projecteur 3D. J'ai seulement utilisé le backend Direct3D9. Le plugin StereoManager est livré avec une démo modifiée (Fresnel_Demo), qui peut vous aider à configurer votre première application multi-têtes.

Je dois aussi ajouter que le correctif multihead fait maintenant partie du noyau Ogre, à partir de la version 1.7. Ogre1.7 a été récemment publié en tant que RC1, ce qui pourrait être le moyen le plus rapide et le plus facile de le faire fonctionner.