Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.05.2014, 14:02

Optimierung Inkscape/SDL

Hallo miteinander

Ich arbeite aktuell an meinem ersten 2D-Spiel, welches in C++ geschrieben. Dabei verwende ich die SDL 2.0 Library.
Die Grafiken erstelle ich mit Inkscape.

Mir ist nun aufgefallen, dass die Grafiken teils stark an Qualität verlieren sobald sie im Spiel geladen sind. Meine Frage ist nun, wie lässt sich dies
optimieren und in wie weit stehe ich mit der SDL vor Limitationen?
Aktuell verwende ich eine Auflösung im Spiel von 1024 x 768, 16 bit. Wenn ich die Vektorgrafiken in Inkscape exportiere, passe ich entsprechend die
Grösse x * y an wobei die DPI automatisch angepasst wird.

Wie macht ihr das, wie geht ihr vor? Wie werde ich ein Maximum an Qualität erreichen?

Ich wäre auf Antworten dankbar.

Eric

2

29.05.2014, 14:14

Als Vektorgraphik exportieren und im Spiel wieder importieren und interpretieren. :P

MfG
Check

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

29.05.2014, 14:23

Verwendest du die hauseigene SDL_LoadBMP Methode oder die Erweiterung SDL_Image? Ich würde, falls noch nicht verwendet, ganz stark zu SDL_Image raten.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

4

29.05.2014, 16:44

Danke für die Antworten. Ich verwende SDL_image. Sollte ich die Vektor-Dateien in einem grösseren Format abspeichern zB 500 x 300, dann aber in einer kleineren Grösse laden? Ich finde es relativ anspruchsvoll, dass alle Details im kleinen Format noch ersichtlich sind. Erstellt ihr die Grafiken jeweils direkt in der gewünschten Grösse?

5

30.05.2014, 00:18

Wenn es wirklich vektoriale Beschreibungen deiner Bilder sind, die du da lädst, sollte eigentlich nicht die Auflösung, sondern lediglich die Skalierung davon abhängig sein, in welchen Dimensionen du deine Textur abspeicherst. Ich muss gestehen, dass ich noch nie mit der SDL gearbeitet habe, aber generell sollte dies überall gleich sein.

Was mir aufgefallen ist: Du definierst "Auflösungs-Verlust" nicht genauer. Meinst du damit, dass die Farben teilweise falsch angezeigt werden? Wenn ja, dann solltest du deine Farbtiefe auf 32-bit hochregulieren. Denn 16-bit erlauben weitaus weniger Farbkombinationen.

Prüf also mal diese zwei Dinge: Ob deine Grafiken wirklich in Vektorformaten (wie etwa SVG) gespeichert sind, und ob 32-bit Farbtiefe hilft.

Liebe Grüße,
~ EuadeLuxe ~

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

30.05.2014, 00:21

Ein Vergleich (Grafik vorher, Grafik im Spiel) wäre sicher hilfreich.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

30.05.2014, 06:55

Wenn es wirklich vektoriale Beschreibungen deiner Bilder sind, die du da lädst, sollte eigentlich nicht die Auflösung, sondern lediglich die Skalierung davon abhängig sein, in welchen Dimensionen du deine Textur abspeicherst. Ich muss gestehen, dass ich noch nie mit der SDL gearbeitet habe, aber generell sollte dies überall gleich sein.
Ziemlich sicher nicht. Ich kenne kein Framework (vielleicht Flash? k.A.), welches von Haus aus SVG Dateien laden kann. Es handelt sich also im Bitmaps, die dann irgendwie zer-skaliert werden.

Wie Achitekt schon sagte, ein Bildvergleich führt hier sicher zu den passenderen Hinweisen. Vielleicht werden die Bilder ja auch nur um halbe Pixel-Koordinaten verschoben gezeichnet und werden deshalb matschig, wer weiß das schon so genau ohne Bild?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

30.05.2014, 11:59

Wie gesagt, sollte er Bitmaps statt Vektordateien laden (in der Tat sehr wahrscheinlich, BlueCobold) würde das eine ganze Menge erklären. Generell haben Vektor-Dateien in der Spiele-Entwicklung einen relativ geringen Stellenwert.

#EDIT: Das "überall gleich" bezog sich nicht darauf, dass so gut wie jedes Framework Vektor-Dateien laden kann. Vielmehr wollte ich ausdrücken, dass Vektor-Dateien, wo immer sie zum Einsatz kommen, beliebig skaliert werden können.

9

01.06.2014, 19:43

Danke für eure Antworten. Ich habe versucht einen Vergleich zu machen, entweder bin ich zu blöd aber es klappt nicht.
Wenn ich im Vollbild das Spiel starte scheint das Bild verzerrt zu sein. Ich mache dann einen Screenshot und schaue das Bild an und es sieht dann viel schärfer aus als wenn ich das Spiel spiele.

Ich arbeite an einem Monitor mit einer Auflösung von 2560 x 1440 (27-Zoll iMac) und es wird automatisch ein Rahmen links und rechts erstellt. Vielleicht reicht dieser Rahmen nicht? Eigentlich sollte so die richtige Auflösung automatisch angepasst worden sein? Wenn ich im Fenster das Sprite mit dem Original *.png-Datei vergleiche sehe ich keinen Unterschied (siehe Bild).

SVG Dateien können meines Wissens nicht in der SDL geladen werden. Die Vektorgrafiken wandle ich entsprechend in Rastergrafiken um (*.png). In der 2D-Spielwelt haben Vektor-Grafiken schon ihren Stellenwert denke ich,
natürlich nicht direkt im Sinne dass sie im Spiel verwendet werden, sondern da man so mit einem minimalen Aufwand Raster-Grafiken für verschiedene Auflösungen erstellen kann.

Eric
»KPEric« hat folgendes Bild angehängt:
  • Vergleich.png

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »KPEric« (01.06.2014, 19:52)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

10

01.06.2014, 20:34

Du könntest es mit SDL_svg probieren: http://www.linuxmotors.com/SDL_svg/
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige