Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.08.2004, 15:06 Titel: Farbe dynamisch ändern |
|
|
Hi,
angenommen, ich habe eine Grafik, z.B. einen blauen Kreis mit rotem Hintergrund.
Nun würde ich diese Grafik (als Sprite) gerne zweimal zeichnen. Kann ich das irgendwie so anstellen, dass ich bei dem zweiten Mal zeichnen das Blau durch Gelb ersetze?
Also etwa so: "zeichne Sprite s und ersetze dabei Farbe #00FF00 durch die Farbe #00AAAA"
thx
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
sp3cK-r0LL3 Senior JLI'ler
Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 02.08.2004, 15:07 Titel: |
|
|
geht das vielleicht mit ner if abfrage? also if bla then andere farbe :/ kenn mich aber noch nicht so gut aus _________________ sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.08.2004, 15:22 Titel: |
|
|
hm.... esgeht mir ja nicht darum. z.B. die Hintergrundfarbe zu setzen, das wäre kein Problem. Da muss beim Zeichnen des Sprites irgendwas gemacht werden, aber ich weiß nicht, was - wenn es überhaupt geht
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 02.08.2004, 15:42 Titel: |
|
|
Du kannst natürlich die Textur aus dem VRAM locken dir die Pixeldaten holen und dann mit 2 for schleifen(für höhe*breite) die farbwerte abfragen und ändern. Allerdings würde ich von sowas eher abraten. Eher würde ich eine Textur für den Hintergrund anlegen und dann jeweils eine für eine kreis, die dann mit alphakey auf die andere textur geblendet werden.
Vielleicht kannst du auchmal konkretet sagen wofür du das brauchst? |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.08.2004, 16:30 Titel: |
|
|
@Mirca..:
1. Hätte ich auch vorgeschlagen...
2. ??? Das war bestimmt nur ein Beispiel, er will das sehr wahrscheinlich an viel komplexeren Sprites anwenden, z.B. an einem Player Sprite, um nicht für beide Teams ein Sprite erstellen zu müssen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.08.2004, 17:49 Titel: |
|
|
Konkret geht es mir um eine Textengine. Ich habe eine Grafik mit Buchstaben und wollte einfach mal wissen, ob ich da relativ einfach mehrfarbigen Text erzeugen kann...
Aber bei einigen anderen Fällen wäre sowas auch praktisch gewesen, aber dann halt net...
Ich weiß, dass es bei DX auch ne Textfunktion gibt, aber die mag ich nicht so wirklich...
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 02.08.2004, 18:14 Titel: |
|
|
http://www.bengine.net/tut1.htm
Ist mein Tutorial für ein eigenes textsystem. Wenn du die Schrift von Anfang an weiss lädst, kannst du sie später in alle farben ändern. Dazu musst du nur beim zeichnen des Sprites den Farbwert ändern:
Code: |
D3DCOLOR Color = D3DCOLOR_XRGB(255,0,0);
m_lpTextSprite->Draw(m_lpTextTexture,
&Letter,
&m_vScale,
&m_vRotationCenter,
m_Rotation,
&m_vPosition,
Color;
|
So wäre der Text also Rot. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.08.2004, 18:38 Titel: |
|
|
Baut doch nicht so lahme Textengine!
Schreibt ein Programm, dass alle Zeichen einzeln analysiert und nur die Pixelkoordinaten in einem Array speichert, aus denen das Zeichen wirklich besteht. Danach kann man Text ruckzuck zeichnen. Ist garantiert mindestens nochmal 200% schneller, als die von dir, Ben!
Wie ich das verstanden habe (wegen &Letter, ich gehe davon aus, dass du nur einen Buchstaben übergibst), zeichnest du mit einem Auruf nur ein Buchstaben/Zeichen.
Warum das nicht gut ist:
1. Die Draw Funktion wird zuoft aufgerufen, Daten schreiben, Ruckrufaddresse anlegen,etc...
2. Lockst und Unlockst du die Zielsurface unnötig oft
3. Wenn öfter der gleiche Buchstabe in einem Textstring benutzt wird, kannst du dir auch da das unnötige Locken und UNlocken sparen
4. ...
5. Kann man in einem Spiel nicht alles genug optimieren, außer du verwendest fast keinen Text währrend des Spielens, nur für die Auftragsbeschreibung,...
6. Entschuldigung, wenn du doch einen ganzen Satz aufeinmal an die Funktion schickst!
Grafik & AI brauchen am meisten Rechnerleistung, und da sollte man so gut optimieren, wie es nur geht.
Zitat: | Konkret geht es mir um eine Textengine. Ich habe eine Grafik mit Buchstaben und wollte einfach mal wissen, ob ich da relativ einfach mehrfarbigen Text erzeugen kann...
Aber bei einigen anderen Fällen wäre sowas auch praktisch gewesen, aber dann halt net... |
Aber laut HotAcid's Kommentar scheint das wohl für ihn zuviel Aufwand zu sein! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 02.08.2004, 19:50 Titel: |
|
|
Ist ja nur erstmal für den Anfang für die Spiele, die ich momentan mache, reichts so... so ein Programm schwebt mir schon nochmal vor, aber das schiebe ich noch erfolgreich vor mir hin...
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 02.08.2004, 19:52 Titel: |
|
|
Wenn du nur Zeichen aus Fonts benutzen willst, dafür gibt es ein Programm, dass dir das ganze schon in C++ Code umwandelt. Wenn du sowas gebrauchen kannst, kann ich mal auf meiner Festplatte rumsuchen... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.08.2004, 20:17 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | Baut doch nicht so lahme Textengine!
Schreibt ein Programm, dass alle Zeichen einzeln analysiert und nur die Pixelkoordinaten in einem Array speichert, aus denen das Zeichen wirklich besteht. Danach kann man Text ruckzuck zeichnen. Ist garantiert mindestens nochmal 200% schneller, als die von dir, Ben! |
Dafür müsstest du aber auch jedes Zeichen einzeln zeichnen. Du müsstest sogar jeden Pixel einzeln zeichnen.
Wenn ich das richtig verstanden habe, dann dürfte das aber eher langsamer sein...
Ich würde eher empfehlen, dass du einfach am Anfang des Programms festlegst, welche Farben es geben soll und du dann eben beim Initialisieren mehrere Surfaces erstellst, in denen du dann per Lock&Unlock die Pixelfarbe änderst oder vllt. geht das auch, indem du ein farbiges Rechteck halbtransparent darüberblittest _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 02.08.2004, 20:58 Titel: |
|
|
@TLOP:
Jo, so hab ich das auch gelöst (mit DDraw).
Ich habe in meine Engine eine graue Schrift geladen ("game/font.bmp").
Im menü wurden verschiedenfarbige schriften verwendet.
Es wurden dann automatisch aus der font.bmp neue font.bmp's erstellt mit den benötigten farben. Dabei wurde die Farbe im hex format an den dateinamen angehängt und dieser string als ID im resourcen manager verwendet, so dass jede Farbe nur einmal vorkommen kann. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 02.08.2004, 21:33 Titel: |
|
|
Ich glaube man müsste alle zeichen nur 1 mal einzeln zeichnen solange der text nicht dynamisch ist, und dann immer die Textur mit allen Zeichen zeichnen. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.08.2004, 21:42 Titel: |
|
|
Ja, klar.
Ich würde auch empfehlen, einfach den gesamten Text buchstabenweise in ein Surface zu blitten. Aber wenn du einen riesigen Text mit 1000-den von Zeichen hast(was ja bei RPGs/Adventures leicht mal vorkommen kann), kann das schon zu einem kurzen Frameeinbruch kommen.
Aber i.A. muss der Spieler auch net schnell reagieren, wenn der ganze Bildschirm voller Text ist
Aber wenn du auch noch unterschiedliche Textfarben hast, dann wäre es denke ich Performanceschonender, wenn du das beim Initialisieren machst und nicht für jeden Text die Farben neu "berechnest". _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 03.08.2004, 06:24 Titel: |
|
|
Back2Topic
Wenn du nur das Sprite färben willst empfehle ich das Sprite in Monochrom zu ändern (IrfanView kann das zum Beispiel) und dann wie schon mal geschrieben die Farbe mit:
D3DCOLOR Color = D3DCOLOR_XRGB(255,0,0);
zu beeinflussen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
|