DirectX Graphics 8 (D3D): Wie kann ich die GDI nutzen?
-
Is schon irgendwie ärgerlich, alles würde schon gehen, Alphablending, Drehen, Zoomen, nur so ne billige Ellipse nicht
-
Wenn die Objekte nicht ausgefüllt sein sollen, kannst du auch einfach LINELIST/STRIPs statt TRIANGLESTRIPs nehmen. Kreise/Ellipsen sind ja nur 'ne billge Frage von etwas sinus/cosinus, das weiss google auch. Tollerweise kannst du dann deine Grundform auch drehen, zoomen, bla.
Locken ist auf jeden Fall arschlahm, also lass es besser wenn es auf Geschwindigkeit ankommt.
-
Ausgefüllt müssen zumindest Rechtecke in beliebiger Farbe sein können. Ich hab jetzt grad von ner möglichen Lösung (ohne GDI) gehört, wenn das funktioniert, sag ich bescheid.
Wenn jemand noch weiss, wie man die GDI nutzen kann, so möge er es mir bitte sagen, vielleicht brauch ich sie trotzdem noch...
-
Ok für ausgefüllte Rechtecke nehm ich jetzt ein entsprechend gestrecktes, weisses 3x3 Bild und über die Farbkanäle kann ich die Farbe bestimmen.
Neues Problem: Ich möchte den Gesundheitsbalken von Einheiten schön von Grün über Gelb nach Rot verschieben. Die Formel für die Farbanteile von 0-255 hab ich längst. Wie kann ich daraus jetzt so einen hex-wert basteln? Die ersten beiden Ziffern sollen immer FF sein und die anderen 3 Paare beliebige Werte zwischen 0 und 255.
EDIT:
*nach Bitshift Google und hoff dass das des richtige ist*
-
Eine einfarbige (und speziell weisse!) Textur ist sinnlos, dann kannst du auch einfach keine nehmen. Und 3x3 ist auch ne komische Auflösung. Für die Bitshifts gibts in DX sogar Makros.
-
Ich zeichne alles mit Hilfe der Sprite-Funktionen (is ja auch ein 2D-Spiel). Weiß ist die Textur deshalb, damit alle drei Grundfarben in voller Intensität sind. Mit den Farbkanälen lassen sich die Farben dann filtern. Die Auflösung von 3x3 hab ich aus anderen Gründen gewählt...
-
So, nach gründlicher Überlegung und Auseinandersetzung mit Zahlensystemen (hatten wir heute in der Vorlesung erst
), hab ich mir meine eigene RGB-Funktion geschrieben.
Damit sind meine Probleme vorerst gelöst, danke für die Antworten.
Verbesserungsvorschläge zur Funktion sind willkommen.class Graphics { public: static const int screenX = 1024, screenY = 768; // Öffentliche Funktionen: [...] inline static DWORD MyRGB(const DWORD alpha, const DWORD red, const DWORD green, const DWORD blue) { // Anmerkung: typedef DWORD D3DCOLOR // Alle Werte von 0-255! return blue + green*(16*16) + red*(16*16*16*16) + alpha*(16*16*16*16*16*16); } [...] }
Ich werde bescheid geben, sobald die DX8 Version von meinem Spiel online ist, vielleicht erbarmen sich ein paar Leute und testen das Spiel auf ihren Grafikkarten. Ich bin mir nämlich nicht sicher, ob es Probleme mit 555 und 565 Modi gibt
-
Optimizer schrieb:
Verbesserungsvorschläge zur Funktion sind willkommen.
Dringend shiften statt multiplyen!!
-
Ok, jetzt schau ich mir das shiften doch mal an
-
Hahahahaha...
-
inline static DWORD MyRGB(const DWORD alpha, const DWORD red, const DWORD green, const DWORD blue) { // Parameter von 0-255! return blue + (green << 8) + (red << 16) + (alpha << 24); }