JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Farbintensität einer Textur erhöhen
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
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 24.07.2005, 17:15    Titel: Farbintensität einer Textur erhöhen Antworten mit Zitat

Hallo Leute,

ich möchte gerne beim Rendern die Farbintensität einer Textur erhöhen.
Ich habe schon ein bisschen mit SetTextureStageState und SetRenderState rumgespielt, bin aber nicht zufrieden. Ich möchte einfach, dass die Textur irgendwie glüht.

Das hier habe ich schon probiert:
CPP:
      // hier wird die Textur gesetzt
      m_pGfx->m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_ADD);
      m_pGfx->m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
      m_pGfx->m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
      // Diesen Faktor möchte ich immer erhöhen, damit der Glow immer stärker wird
      m_pGfx->m_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, 0xff505050);
      // hier wird die Textur gerendert


Diese Einstellungen lassen die Textur milchig aussehen. Ich hätte es aber gerne so, dass die Farben kräfter erscheinen als im Orignal-Zustand.

Ich hoffe ihr könnt mir auf die Sprünge helfen. Smile

Danke im Voraus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 24.07.2005, 17:22    Titel: Antworten mit Zitat

Versuche mal diese Berechnung umzusetzen:

Ende = One*Textur+TexturFaktor*Textur
_________________
"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
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 24.07.2005, 17:59    Titel: Antworten mit Zitat

Ich weiß nicht genau, was du unter Farbintensität verstehst, aber ich bilde mir ein, wenn man die RBG-Komponenten einer Farbe gleichmäßig nach unten setzt, so wird diese dunkler und wirkt intensiver.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 24.07.2005, 23:00    Titel: Antworten mit Zitat

Hmm...ich würde unter der Farbintensität was anderes verstehen. Nämlich die Unterschiede der R-, G- und B-Werte. Ein neutrales Grau(egal wie hell) hat R=G=B, d.h. alle Werte sind gleich. Eine intensive Farbe wie Rot hat 255,0,0.
Deshalb würde ich jetzt mal sagen, eine intensive Farbe hat große Differenzen zwischen den R-, G- und B-Werten.
_________________
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
Sören
JLI Master Trainee



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

BeitragVerfasst am: 25.07.2005, 00:27    Titel: Antworten mit Zitat

Sowie TLOP das beschrieben hat, habe ich auch zu erst gedacht. Man könnte mal Probieren den größten der RGB-Faktoren zB mit dem Faktor 1,25 den zweiten mit 1 und den dritten mit 0,75 zu multiplizieren zB!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



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

BeitragVerfasst am: 25.07.2005, 00:49    Titel: Antworten mit Zitat

So, ich bins nochmal. Ich wurde gerade selbst von Neugier und Ehrgeiz erfasst und hab mal eben meine Engine angeworfen und das ganze an Cg Fragment Shader ausprobiert.
Rausgekommen is das hier, ich hab insgesamt 5 Verfahren getestet:
click to view jpg (163kb)
click to view PNG (bessere Quali aber 1,2MB)

Zu den Verfahren:
I. keine Modifikationen, das normale Bild
II. der höchste der RGB Werte wird mit 1.25f, der nächste mit 1.0f und der kleinste mit 0.75f multipliziert.
III. Alle Werte wurden mit 1.25f multipliziert.
IV. Der höchste Wert multipliziert mit 1.25f, die anderen mit 1.0f.
V. Alle Werte wurden mit 0.75f multipliziert.

Ich persönlich finde Variante II mit Abstand am besten aber entscheidet selbst, wahrscheinlich sieht IV bei euch besser aus als bei mir, da ja Farbunterschiede normalerweise bei TFTs etwas verloren gehen.
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: 25.07.2005, 12:05    Titel: Antworten mit Zitat

Ja, sieht doch gut aus. Mir gefällt II auch am besten. Zwischen III und V ist hier kaum ein Unterschied erkennbar(CRT). Auf meinem TFT drüben hab ich den Kontrast relativ hoch, die Farben sind da sehr intensiv Smile
_________________
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
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 12:09    Titel: Antworten mit Zitat

yeah, das mit dne Farben scheint echt zu stimmen, 2 sieht viel intensiver aus. Würde man den kleinsten mit 1,25 und den größten mit 0,75 multiplizeirne würdest, wäre es warhscheinlich deutlich matter, ne?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 12:31    Titel: Antworten mit Zitat

Jepp, aber notfalls sollte man auch noch einen Überlaufschutz einbauen. Sonst bekommt man vllt. mal mehr als 255 heraus. Oder wenn man etwas matter machen will, kanns auch sein, dass man die Werte "aneinander vorbei multipliziert", sodass die Farbwertdifferenz letztendlich nicht kleiner geworden ist. 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
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 13:39    Titel: Antworten mit Zitat

Die Technik funktioniert echt ganz gut.
Aber es gibt bestimmt auch noch andere Techniken die noch zuverlässiger sind. So Sachen mit If-statements und konstanten Werten haben meistens die Eigenschaft einen Haken zu haben...
Ich nehme mal an man muss irgendwie die Differenzen zwischen den Farbwerten vergrößern.
Eigentlich müsste es folgendermaßen funktionieren:
1) Man errechnet den Durchschnitt der drei Farbwerte.
2) Man nimmt für jeden Farbwert die Differenz zu diesem Mittelwert multipliziert sie mit dem Intensitätsfaktor (1 normal, 2 doppelt so kräftig, 0 grau) und addiert das Ergebnis zum Mittelwert.

In C++ Code sähe eine Funktion um die Intensität eines Pixels zu ändern also so aus:
Code:
D3DCOLORVALUE* ChangeIntensity(D3DCOLORVALUE* out, D3DCOLORVALUE* color, float intensity){
   float average=(color->r+color->g+color->b)/3;
   out->r=average+(color->r-average)*intensity;
   out->g=average+(color->g-average)*intensity;
   out->b=average+(color->b-average)*intensity;
   return out;}

Ich habe allerdings keine Ahnung wie man das mit der fixed function pipeline umsetzen könnte. Mit pixelshadern geht's natürlich ganz einfach.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 14:17    Titel: Antworten mit Zitat

naja, in aktuellen Spielen werden ja sehr viele Shader eingesetzt. Demnach würde da doch nicht so viel gegen sprechen, oder? Dumm nur das ich kaum Plan von Shadern habe. Wäre doch ien nettes Beispiel für ein Shader Tut, oder?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 14:43    Titel: Antworten mit Zitat

Man muss aber nicht alles mit shadern machen.

Langt es nicht wenn du zwei Texturen übereinanderlegst und den blend mode auf Multiplikation/Addition stellst?
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 25.07.2005, 14:46    Titel: Antworten mit Zitat

Von Pixel Shadern hab ich auch net sooo viel Ahnung, weil meine Grafikkarte die nicht unterstützt *grummel*. Ich glaube so langsam führt kein Weg mehr dran vorbei mir mal ne Neue zu kaufen. Aber in "3D-Effekte für Spieleprogrammierer" hab ich jetzt gelernt wie HLSL Pixel Shader funktionieren. Als Beispiele gibt es da aber besseres. z.B. erstmal ein ganz normaler Pixelshader der eigentlich genau das gleiche macht wie die fixed function pipeline mit D3DTOP_MODULATE und dann ein Bump-mapping shader (so wird's in "3D-Effekte f. S." gemacht).

EDIT
ich hasse es wenn man einen Post schreibt den dann abschickt und zwischendurch schon wieder wer anders geschrieben hat. Das bezog sich auf Jonathan Kleins Post.

@PeaceKiller
Hab ich auch schon überlegt. Das könnte mit D3DTOP_LERP gehen.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Sören
JLI Master Trainee



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

BeitragVerfasst am: 25.07.2005, 15:14    Titel: Antworten mit Zitat

Peacekiller hat schon recht, alles mit Shader muss man nicht machen. Vorallem sollte ein vernünftiges Programm ja auch einen Fallback Modus haben, da ja noch nicht mal annähernd alle eine Shader-GraKa haben. Leider hab ich von den DX Parametern überhaupt keine Ahnung, daher weiß ich nicht wie man eine ähnliche Modulation erzeugen könnte. Hier sieht man aber mal den enormen Vorteil von Shader und vorallem von Cg, schließlich konnte ich die Shader eben schnell in C Code schreiben, mit if() und allem drum und dran!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 25.07.2005, 15:24    Titel: Antworten mit Zitat

Der Kontrast ist aber etwas anderes als die TexturIntensität Wink

Intensität:

Code:
Resultat = Textur*Intensität


Kontrast:

Code:
Resultat = Textur^Kontrastwert


Den Kontrast kann man aber auch anders Berechnen ist dabei aber viel billiger:

Code:
Resultat = Textur*Kontrastwert*2 (Kontastwert im Bereich 0.0-1.0)


Die 2te Kontrastvariante sollte dabei im FFP Lösbar sein, leider bietet DirectX kein Blendmode Modulate2x an was Kontrastwert*2 ersetzen würde.
_________________
"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