Ich wurde mit einem C ++ - 3D-Anwendungsprojekt herausgefordert, das drei Displays verwenden wird, die jeweils von einer anderen Kamera gerendert werden.
Kürzlich habe ich von Ogre3D erfahren, aber es ist nicht klar, ob es die Ausgabe von verschiedenen Kameras an verschiedene Displays / GPUs unterstützt.
Hat jemand Erfahrung mit einem ähnlichen Setup und Ogre oder einer anderen Engine?
Zumindest auf den meisten Systemen (z. B. Windows, MacOS) erstellt das Fenstersystem 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 auf jeder Anzeige ein separates Fenster verwenden möchten, sind die Dinge möglicherweise etwas komplexer. OpenGL selbst (nicht einmal versuchen) zu definieren, wie die Anzeige in mehreren Fenstern zu behandeln ist - das ist bis zu einem plattformspezifischen Satz von Funktionen. Unter Windows beispielsweise haben Sie für jedes Fenster einen Rendering-Kontext und müssen mit WGLMakeCurrent
auswählen, auf welchen Rendering-Kontext Sie zu einem bestimmten Zeitpunkt zeichnen.
Wenn Speicher verwendet wird, unterstützt der Windows-Port von Ogre3D mehrere Rendering-Kontexte, also sollte dies auch kein Problem sein. 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 es nicht mit Sicherheit sagen.
Meine unmittelbare Vermutung ist jedoch, dass die Unterstützung von drei Monitoren für Ihre gesamte Entwicklungsarbeit fast belanglos sein wird. Natürlich bedeutet es , dass Sie (um Ihrem Chef zu sagen) ein dreifaches Monitor-Setup für Entwicklung und Tests benötigen, was sicherlich keine schlechte Sache ist! : -)
Bearbeiten: OpenGL selbst spezifiziert nichts über Vollbildfenster 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 kann mich nicht erinnern, dass ich das mit mehreren Monitoren gemacht habe, daher kann ich nicht viel mit großer Sicherheit sagen.
Im Fall von OGRE3D gibt es 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 anzuwenden dieser Patch . Mit diesem Patch haben Benutzer es geschafft, eine Ogre-Anwendung auf einer Konfiguration mit 6 Monitoren zu rendern .
Persönlich habe ich diesen Patch erfolgreich angewendet und 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 ab Version 1.7 jetzt Teil des Ogre-Kerns ist. Ogre1.7 wurde vor kurzem als RC1 veröffentlicht, also könnte dies der schnellste und einfachste Weg sein, es zum Laufen zu bringen.