2010-01-07 7 views
8

Ich wurde mit einem C++ - 3D-Anwendungsprojekt herausgefordert, das 3 Displays verwenden wird, wobei jedes von einer anderen Kamera gerendert wird.Multi-Monitor 3D-Anwendung

Kürzlich habe ich über Ogre3D erfahren, aber es ist nicht klar, ob es die Ausgabe von verschiedenen Kameras zu verschiedenen Displays/GPUs unterstützt.

Hat jemand Erfahrung mit einem ähnlichen Setup und Ogre oder einer anderen Engine?

Antwort

3

Zumindest auf den meisten Systemen (z. B. Windows, MacOS) erstellt das Windowing-System einen virtuellen Desktop mit verschiedenen Monitoren, die verschiedenen Teilen des Desktops zugeordnet sind. Wenn Sie möchten, können Sie beispielsweise ein großes Fenster erstellen, das alle drei Anzeigen abdeckt. Wenn Sie dieses Fenster für die Verwendung von OpenGL verwenden, funktioniert fast alles, das OpenGL (fast sicher einschließlich Ogre3D) verwendet, gut, obwohl in einigen Fällen eine so hohe Ausgabeauflösung die Grafikkarte so viel kostet, dass sie etwas langsamer als gewöhnlich ist .

Wenn Sie mit einem separaten Fenster auf jedem Display arbeiten möchten, können die Dinge etwas komplexer sein. OpenGL selbst (nicht einmal versuchen) zu definieren, wie die Anzeige in mehreren Fenstern zu behandeln - das ist bis zu einer Plattform-spezifische Reihe von Funktionen. Unter Windows beispielsweise haben Sie für jedes Fenster einen Renderkontext und müssen WGLMakeCurrent verwenden, um auszuwählen, zu welchem ​​Renderingkontext Sie zu einem bestimmten Zeitpunkt zeichnen.

Wenn der Speicher dient, unterstützt der Windows-Port von Ogre3D mehrere Rendering-Kontexte, so dass dies auch kein Problem sein sollte. Ich würde erwarten, dass es auch auf anderen Systemen mit mehreren Fenstern funktionieren kann, aber ich habe es auf keinem anderen System verwendet, daher kann ich nicht mit Sicherheit sagen.

Meine unmittelbare Vermutung ist jedoch, dass die Unterstützung von drei Monitoren in Ihrer gesamten Entwicklungsbemühung nahezu belanglos sein wird. Natürlich, es bedeutet bedeutet, dass Sie (können Sie Ihren Chef sagen) brauchen eine dreifache Monitor-Setup für die Entwicklung und Prüfung, die sicherlich keine schlechte Sache ist! :-)

Edit: OpenGL selbst gibt nichts über Vollbild-Fenster im Vergleich zu normalen Fenstern. Wenn Speicher dient, zumindest unter Windows, um eine Vollbildanwendung zu erhalten, verwenden Sie ChangeDisplaySettings mit CDS_FULLSCREEEN. Danach behandelt es im Wesentlichen den gesamten virtuellen Desktop als ein einziges Fenster. Ich erinnere mich nicht, dass ich das mit mehreren Monitoren gemacht habe, daher kann ich nicht viel mit großer Sicherheit sagen.

+0

Hallo Jerry, thak Sie für Ihre Antwort. Es ist nicht unbedingt ein separates Fenster für jede Anzeige, da es auf jeder Anzeige ein Vollbild sein muss (ich bin nicht sicher, ob diese Art von Ausgabe von einem Fenster abhängt oder das Fenstersystem umgeht). Was ist deine Meinung? – user16120

+0

gilt auch für LINUX: Wenn Sie mehrere Monitore verwenden, verwenden Sie normalerweise Xinerama, das einen riesigen virtuellen Bildschirm erstellt. – Tilo

3

In Bezug auf OGRE3D sind mehrere Dinge über die Multihead-Unterstützung zu sagen. Meiner Erfahrung nach besteht eine funktionierende Lösung darin, die Quellversion von Ogre 1.6.1 zu verwenden und this patch anzuwenden. Mit diesem Patch haben Benutzer es geschafft, eine Ogre-Anwendung auf einem 6 monitors configuration zu rendern.

Persönlich habe ich diesen Patch erfolgreich angewendet und ihn mit dem StereoManager plugin verwendet, um Ogre-Anwendungen mit einem 3D-Projektor zu verbinden. Ich habe nur das Direct3D9 Backend benutzt. Das StereoManager-Plugin wird mit einer modifizierten Demo ausgeliefert (Fresnel_Demo), die Ihnen bei der Einrichtung Ihrer ersten Multihead-Anwendung helfen kann.

Ich sollte auch hinzufügen, dass das Multihead-Patch jetzt Teil des Ogre-Kerns ist, ab Version 1.7. Ogre1.7 wurde vor kurzem als RC1 veröffentlicht, also könnte dies der schnellste und einfachste Weg sein, es zum Laufen zu bringen.