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

jojendersie

Frischling

Beiträge: 47

Wohnort: Berlin

  • Private Nachricht senden

11

06.08.2008, 17:56

Ok in Zukunft passe ich da mehr auf.
Aber man hat die Möglichkeit, dies besser auszunutzen (da OpenGL Systemnäher ist).
Aber ich mach meine Freunde auch immer so runter, wenn sie mit einem Kommentar aus so einer Zeitschrift auftauchen^^. Ich gebe dir somit vollkommen recht, dieses Kommentar war nicht gut.

Zu 3. Es ist gebräuchlich das Laden und die Positionsverwaltung zu trennen
- da eine Textur mehrfach an unterschiedlichen Stellen auftreten können
- weitere Sprites hinzukommen ... (und man eben mehrfach eine vorhandene Textur verwenden will)

Zu 1. Die Texturen sollten schon in IDirect3DTexture9 Form vorliegen, und ein paar Infos, wie Dateiname,
damit man doppektes Laden verhinder kann.
Das ganze kann man zum Beispiel in einer verketteten Liste oder in Bäumen (schelle Suche möglich) speichern.

Zu 2. Die größen könntest du beim Laden überprüfen und eventuell darauf reagieren, dann liefert der Manager immer gültige Texturen,
aber eigentlich sollte die Textur einfach keine Probleme machen (also Standartabmessungen), das befreit von dieser Sorge.

Anonymous

unregistriert

12

06.08.2008, 18:00

Zitat von »"jojendersie"«

Ok in Zukunft passe ich da mehr auf.
Aber man hat die Möglichkeit, dies besser auszunutzen (da OpenGL Systemnäher ist).
Auch wieder Falsch, OpenGL ist genau wie Direct3D oder DirectDraw "Hardware-Nah". Sie benötigen beide einen Treiber mit jeweiliger Implementierung.

DirectX hat nicht umsonst den Namen "Direct". Nur weil es ein C-Interface hat, ist OpenGL sicherlich nicht "Hardware-Näher".

ph4nt0m

Frischling

  • »ph4nt0m« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student

  • Private Nachricht senden

13

07.08.2008, 22:51

Zitat von »"jojendersie"«

Zu 2. Die größen könntest du beim Laden überprüfen und eventuell darauf reagieren, dann liefert der Manager immer gültige Texturen,
aber eigentlich sollte die Textur einfach keine Probleme machen (also Standartabmessungen), das befreit von dieser Sorge.

Was genau meinst du mit reagieren? Also doch etwas mit den Bilddaten machen, wenn diese nicht quadratisch mit einer 2er-Potenz-Seitenlänge sind?

jojendersie

Frischling

Beiträge: 47

Wohnort: Berlin

  • Private Nachricht senden

14

08.08.2008, 12:06

Ja das meine ich, aber so etwas habe ich noch nie probiert. D3DXCreateTextureFromFileEx hat zwei Parameter (Width, Height), die man mit Default füllt. Im Hilfetext steht, dass wenn das Device keine ungeraden Texturen unterstützt wird automatisch auf nächste 2er Potenz gestreckt. Ich weiß jetzt aber nicht, ob ein leerer Teil angefügt wird, oder wirklich gestreckt, außerdem müsste man an dieser Stelle auch selbst Werte angeben können und so die Texturgröße beeinflussen (höhere Performenc-Kosten).
Wie es außsieht braucht man sich bei DX darum keine Gedanken zu machen.

ph4nt0m

Frischling

  • »ph4nt0m« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student

  • Private Nachricht senden

15

08.08.2008, 13:52

Zitat

Wie es außsieht braucht man sich bei DX darum keine Gedanken zu machen.

Das ist ja schön und gut, aber ich möchte aus bestimmten Gründen kein D3DX bzw. die genannte Funktion verwenden. Deshalb lautete meine ursprüngliche Frage (siehe erster Post) ja auch, wie man diese Streckung oder was auch immer selbst durchführt :roll: Es kann doch nicht sein, dass hier alle mit D3DX arbeiten oder sich darauf verlassen, dass die Grafikkarte "ungerade" Texturgrößen unterstützt.

Gruß,
ph4nt0m

Anonymous

unregistriert

16

08.08.2008, 14:03

ph4nt0m
Endlich mal einer der nativ Direct3D codet ohne fu D3DX!

Ist eigentlich ganz easy. Lad die Grafik mit GDI Funktionen, welche ebenfalls das Strecken ermöglichen, nachdem du gestrekt hast stopf die Daten in eine Textur und freu dich. :)

ph4nt0m

Frischling

  • »ph4nt0m« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student

  • Private Nachricht senden

17

08.08.2008, 14:17

Erstmal danke für deine Antwort :)
Meinst du GDI-Funktionen, die Grafikformate laden können? An welche denkst du da? Soweit ich weiß kann reine GDI ja leider nur mit normalen und damit unkomprimierten Bitmaps umgehen. Der Loader für das verwendete Format ist im übrigen ja bereits vorhanden. Es liegen also die Bilddaten als Array im Speicher bereits vor.

Anonymous

unregistriert

18

08.08.2008, 14:25

Also unter Windows gibt es sowas feines wie OLE:
OleLoadPicturePath

Damit kann man eigentlich jedes passable Format laden. BMP, EMF, GIF, ICO, JPG, WMF halt.

Würde später jedoch auf einen eigenen Loader umsteigen. So und fürs Stretchen gibt es die normalen GDI Funktionen.

ph4nt0m

Frischling

  • »ph4nt0m« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student

  • Private Nachricht senden

19

08.08.2008, 15:39

Meinst du StretchDIBits? Diese Funktion scheint aber gleichzeitig auch immer das neue, gestreckte Bild zu zeichnen, nämlich in das Fenster, mit dem der Device Context verbunden ist. Doch ich möchte ja im Prinzip alles im Speicher erledigen. Daher weiß ich auch gar nicht, wie ich den DC erstellen soll.

Meinst du eine andere Funktion oder gibt es eine Möglichkeit, das Bild direkt in den Speicher zu stretchen?

Anonymous

unregistriert

20

08.08.2008, 15:41

ph4nt0m
Genau diese Funktion meinte ich. Überleg mal: Ob du es nun siehst oder nicht, für das System ist es doch alles das selbe: im Speicher.

Werbeanzeige