Verstehen, wie Texturen für Spiele erstellt / verwendet werden, wenn die Leistung auf zwei Größen begrenzt ist


8

Ich habe einige Fragen zum Erstellen von Grafiken für ein Spiel.

Als Beispiel. Ich möchte ein Motorrad bauen. (1 Pixel = 1 Zentimeter) Mein Motorrad hat also eine Breite von 200 und eine Höhe von 150. (200x150) Aber das libgdx erlaubt nur das Laden von Größen mit der Potenz von 2?! (2,4,8,16, ...)

Zuerst habe ich so darüber nachgedacht. Ich werde mein Fahrrad mit der Größe (200x150) erstellen und es als PNG speichern. Dann öffne ich es wieder (z. B. mit Gimp) und verkleinere das Bild auf eine Größe, die Werte mit einer Potenz von 2 (128x128) verwendet. Ich werde das als Textur in das Programm laden und die Breite auf 200 und die Höhe auf 150 einstellen.

Aber wäre das nicht ein Problem? Weil ich beim ersten Gespräch einige Pixelinformationen verlieren werde.?! Ist es nicht?


1
Libgdx verfügt über einen Texturpacker, der Ihre Bilder zu einigen größeren Bildern (Atlanten) kombiniert und Ihnen hilft, nur den gewünschten Teil davon zu zeichnen.
Matsemann

Antworten:


11

Der Grund, warum Sie auf Größen mit zwei Potenzen beschränkt sind, liegt in der Funktionsweise von Video-RAM. Beachten Sie, dass Sie das Bild normalerweise auf die nächsthöhere Zweierpotenz (z. B. 512 x 256) einstellen und dann nur einen Teil dieses Bildes für Ihre Grafiken verwenden sollten. Sie würden Ihre UV-Koordinaten so einstellen, dass nur ein Unterabschnitt des Bildes für die von Ihnen gerenderten Dreiecke verwendet wird.

Wenn Sie sich Sorgen über die Speichernutzung machen, können Sie auch einen Teil des verbleibenden Speicherplatzes für verschiedene Objekte verwenden und diese Objekte diesem Teil der Textur UV-zuordnen. Das Erstellen einer solchen Textur wird auch als "Atlas" bezeichnet.


4
Erwähnenswert ist, dass Atlanten auch die Leistung optimieren, denn je weniger Sie Texturen wechseln, desto weniger Stapel und desto schneller wird gezeichnet.
Gustavo Maciel

3

Sie müssen Texturkoordinaten verwenden, anstatt die Größe zu ändern, z. B. nur einen Teil der gesamten Textur zeichnen. Ich weiß nicht, wie es in libgdx funktioniert, aber es ist üblich, diesen Ansatz zu verwenden. Ein anderer Ansatz ist die Verwendung eines Texturatlas, den Sie im Speicher haben, z. B. 1024 x 1024, und wenn Sie Ihr Bild laden, laden Sie es in das Atlasrechteck.


0

Sie können die Größe Ihres Bildes entsprechend der entsprechenden Größe etwas größer oder kleiner konvertieren. Ich hatte diesen Link verwendet - http://www.garyshood.com/imageconvert/ Sie können eine Größe verwenden, die vollständig durch 2 teilbar wäre. Wenn Ihre Bildgröße beispielsweise 200 ist, ist 200/2 = 100; 100 / 2 = 50; 50/2 = 25, daher ist 25 hier nicht durch 2 teilbar. Daher ist 200 keine geeignete Größe. Sie können 1024, 512, 256, 128 usw. verwenden. Anschließend können Sie Teile dieses Bildes in Ihren Grafiken verwenden. Die andere Alternative wäre, alle Ihre Texturen mithilfe der libgdx Texture Packer-Benutzeroberfläche einfach in den Texturatlas zu kombinieren und dann die Textur aus diesem Atlas zu verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.