JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=811cd50281a26d774d57b8ef6925026eMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Farbe dynamisch ändern
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 02.08.2004, 15:06    Titel: Farbe dynamisch ändern Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
sp3cK-r0LL3
Senior JLI'ler


Alter: 34
Anmeldedatum: 18.06.2004
Beiträge: 275

Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 15:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 15:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 15:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 16:30    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 17:49    Titel: Antworten mit 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...


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 18:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 18:38    Titel: Antworten mit Zitat

Baut doch nicht so lahme Textengine! Rolling Eyes Laughing Wink

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! Smile

Grafik & AI brauchen am meisten Rechnerleistung, und da sollte man so gut optimieren, wie es nur geht. Razz

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! Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 19:50    Titel: Antworten mit Zitat

Ist ja nur erstmal für den Anfang Wink 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 19:52    Titel: Antworten mit Zitat

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...Wink Very Happy
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 20:17    Titel: Antworten mit Zitat

TheMillenium hat Folgendes geschrieben:
Baut doch nicht so lahme Textengine! Rolling Eyes Laughing Wink

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 20:58    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 21:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.08.2004, 21:42    Titel: Antworten mit Zitat

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 Wink
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.08.2004, 06:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum