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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

21

06.10.2014, 07:36

Das funktioniert aber nur, solange kein Zoom und keine Rotation vorhanden ist.
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]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

06.10.2014, 08:47

Ein zusätzliches Problem bekommt man durch MIP-Mapping.
Da werden verschiedene Sub-Texturen im Atlas zwangsläufig irgendwann vermischt.
Man kann das so weit wie möglich hinauszögern, indem man Position und Größe aller Sub-Texturen auf möglichst große 2er-Potenzen setzt.

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

23

11.10.2014, 00:03

Entschuldigt das ich länger nicht geantwortet habe ich hatte viel zu tun...
Das funktioniert aber nur, solange kein Zoom und keine Rotation vorhanden ist.
Bezieht sich das auf eXpl0it3rs Vorschlag?

Man kann das so weit wie möglich hinauszögern, indem man Position und Größe aller Sub-Texturen auf möglichst große 2er-Potenzen setzt.
Wie würde so etwas im Code denn aussehen kann mir darunter momentan nichts vorstellen.
So berechne ich aktuelle die Position aller Sub-Texturen (Wenn das gemeint ist):

C-/C++-Quelltext

1
2
3
4
5
                 // define its 4 texture coordinates
                quad[0].texCoords = sf::Vector2f(static_cast<float> (tu * m_tileSize.x), static_cast<float> (tv * m_tileSize.y));
                quad[1].texCoords = sf::Vector2f(static_cast<float> ((tu + 1) * m_tileSize.x), static_cast<float> (tv * m_tileSize.y));
                quad[2].texCoords = sf::Vector2f(static_cast<float> ((tu + 1) * m_tileSize.x), static_cast<float> ((tv + 1) * m_tileSize.y));
                quad[3].texCoords = sf::Vector2f(static_cast<float> (tu * m_tileSize.x), static_cast<float> ((tv + 1) * m_tileSize.y));


Und wenn ich die Größe der Sub-Texturen anhebe steigt doch auch die Größe der Datei immens an?

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

24

11.10.2014, 07:14

Bezieht sich das auf eXpl0it3rs Vorschlag?
Offensichtlich.

Und wenn ich die Größe der Sub-Texturen anhebe steigt doch auch die Größe der Datei immens an?
Doch, natürlich.
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]

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

25

12.10.2014, 01:20

Also das Problem scheint soweit gelöst ich habe die Datei dem Anhang entsprechend editiert und im Code einen Offset für die Textur-Koordinaten mit ein berechnet. Das ganze funktioniert sowohl mit Zoom als auch mit Rotation des Spielers. Das MIP-Mapping-Problem konnte ich bisher noch nicht beobachten (von was genau ist das Auftreten abhängig?). Falls es irgendjemanden interessiert habe ich meinen aktuellen Code mal angehängt (ACHTUNG! WIP!).
Und nochmals vielen Dank für die Antworten und die wie immer sehr gute und schnelle Hilfe. :thumbsup:


Edit:
@eXpl0it3r
Ich hatte deinen Vorschlag nicht ignoriert und habe versucht diesen umzusetzen dann jedoch gemerkt das
1) Sobald Zoom ins Spiel kommt das ganze nichts mehr bringt und
2) Das die gesamte Bewegung des Spielers etwas seltsam aussehen lässt.
Danach habe ich nur vergessen das zu erwähnen. Entschuldige dies bitte.
»Swoerm« hat folgendes Bild angehängt:
  • tileset6.png
»Swoerm« hat folgende Dateien angehängt:
  • Tilemap.hpp (2,82 kB - 143 mal heruntergeladen - zuletzt: 06.05.2024, 01:26)
  • Tilemap.cpp (22,82 kB - 58 mal heruntergeladen - zuletzt: 11.05.2024, 12:16)

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

26

12.10.2014, 08:55

Wieso die schwarzen Punkte in den Ecken?
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]

27

12.10.2014, 09:39

Eine andere möglichkeit wäre, wenn du beim Laden die einzelnen Tile-Texturen aus der großen "rausschneidest" und in einzelnen Texturobjekten speicherst. Zwar musst du dann mehr Texturen binden, aber bei einem 2D Spiel sollte das nich trelevant sein. Dafür hat jedes Tile einen klaren Rand und du kannst die Texturen auch kacheln.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

12.10.2014, 09:45

Ganz schlechte Idee, sorry. Sprites einzeln zu speichern ist totaler State-Overkill für's Texture-Binding. Den Vorschlag bitte ganz schnell vergessen. Vor allem ist das nicht mal eine korrekte Lösung, sofern die Sprites keine 2er-Potenz-Größe haben und die Grafik-Karte nur 2er-Potenz-Texturen beherrschen sollte. Dann hat man dieselben Render-Fehler wie vorher und das zusätzlich noch mit katastrophal schlechter Performance.
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]

29

12.10.2014, 10:08

Na wenn du meinst ;) Naja ich mach das ziemlich oldscool: durch jedes Tile iterieren (mit Tile meine ich ein Rechteck, dessen Textur dann gekachelt wird, und nicht unbedingt mit fester größe) und zeichne das denn mit der entsprechenden Textur. (glBegin &co, aber bei nem retro game kann man durchaus ein bisschen retro programmieren :D ). Performanceeinbußen hab ich bisher nicht gehabt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

12.10.2014, 10:52

Doch, ganz sicher sogar hast Du die gehabt.
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]

Werbeanzeige