Frage

ich brauche 2D-Bilder in OpenGL mit Texturen angezeigt werden soll.
Die Bildabmessungen sind nicht notwendigerweise Potenzen von 2
Ich dachte an eine größere Textur zu schaffen und die Anzeige auf den Teil beschränken Ich war mit aber die Bilddaten werden mit OpenCV geteilt werden, so will ich nicht, Daten, die ein Pixel in einer Zeit, in eine größere Textur kopieren.

EDIT - es stellt sich heraus, dass selbst die einfachsten Intel an Bord Grafiken unter Windows unterstützt keine-Power-of-2 Texturen

.

EDIT2 - und selbst wenn Sie nicht arb Texturgröße haben, dann wird Ihr Bild kleiner zu machen und neu zu skalieren, um die Fenstergröße ist es sehr schnell, auch auf Low-End-Hardware

War es hilfreich?

Lösung

Ein paar GL-Erweiterungen in den Sinn kommen. Hier finden Sie aktuelle GL_ARB_texture_rectangle (wenn Sie nicht Mipmapping benötigen) oder GL_ARB_texture_non_power_of_two (wenn Sie tun).

Andere Tipps

Ein Fallstrick ist, zu vermeiden, dass einige Grafikkarten aus irgendeinem Grunde GL_UNPACK_ALIGNMENT erfordern bis 1 (glPixelStorei (GL_UNPACK_ALIGNMENT, 1);) eingestellt werden. Für Nicht-Power-of-two Textur korrekt geladen werden

Wenn ich nur über diese für jedermann kommen in der zukunfts- den größten Teil der Dokumentation und Tutorials / Beispiele hinzufügen, können Sie auf dem Internet über OpenGL finden, ist viele Jahre veraltet, einschließlich der nehe.gamedev Sachen, und werden Sie führen zu glauben, dass Dinge wie nicht-Power-of-two Texturgrößen ein Problem sind, wenn sie nicht realistisch, oder fördern Sie längst veraltete OpenGL-Funktionen oder Bibliotheken zu verwenden, das nicht für ein Jahrzehnt aktualisiert hat.

Zu allererst modernsten Grafikkarten unterstützen tatsächlich Textur Dimensionen, die beide nicht quadratisch und nicht-Power-of-two Größe sind. Aber für eine maximale Kompatibilität mit nur Leistung von zwei Texturen wird wahrscheinlich empfohlen.

Start aus, indem die am nächsten Potenz von zwei zu bestimmen, die größer ist für jeden der Bildabmessungen (Breite und Höhe) und die Schaffung einer Textur dieser Größe ist. Dann haben Sie zwei Möglichkeiten. Die erste ist eine Software Resize der Pixeldaten zu tun, um das Bild zu passen, und dann deine Größe Quad nach dem ursprünglichen Seitenverhältnis, wenn Sie es brauchen anzuzeigen. Oder Sie können nur einen Teil der Textur mit den Bilddaten füllen und transparentes Pixel im übrigen setzen.

Wenn Sie Potenz von 2 Texturen verwenden möchten, erstellen Sie die kleinste, die Ihr Bild aufnehmen kann, und die richtige Textur berechnen Koordinaten nur den Teil des Bilds enthält, Textur anzuzeigen. Z.B. wenn Ihr Bild 400x300 ist, würden Sie eine 512x512 Textur, kopieren Sie Ihr Bild dort Zeile für Zeile verwenden, und Ihre richtige Textur würde 400,0 / 512,0, die unteren 300,0 / 512,0 sein koordinieren. Das wird besser aussehen als Software-Skalierung.

ich genau so, wie Sie beschreiben, kopieren Sie in ein Power-of-2 Textur und entsprechend anpassen meine uv ist. Extensions wäre schön, aber sie sind nicht garantiert, dass sie auf einem beliebigen Computer unterstützt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top