Licht D3D - EDIT: Beleuchtungsstärke



  • rapso schrieb:

    was stimmt an dem lichttest1 nicht? sieht doch ok aus, orange textur mit einer lichtquelle drueber.

    Ja...die gesamte Textur ist Orange...aber ich wollte damit nur zeigen dass er sehr wohl die Farben aus der Textur verwendet aber eben nur einen Teil davon....
    wenn man den Rand um die orange Textur betrachtet sieht man dass sie anders aussieht als sie sollte...(vgl Lichttest3)

    Sonst würde das erste Bild ja dem letzten entsprechen wenn die Texturen korrekt dargestellt werden würden!!

    Anscheinend werden die Texturen verwischt bzw. mit irgendetwas anderem gemischt oder sonst wie verändert....
    lichttest2 sollte ja aussehen wie lichttest3 - nur eben nur zum teil beleuchtet...

    Wenn ich die Textur aus dem "Original" verwende dann ist die Fläche wie auf dem Bild ganz oben fast komplett schwarz...
    Wenn ich eine hellere Version der Textur verwende, ist die Fläche grau...usw

    EDIT: Ok...durch testen hab ich herausgefunden dass er von der Textur nur die ganz linke Pixelspalte verwendet und dann auf die Texturgröße aufzerrt.
    Allerdings sind die Texturkoordinaten ja zwischen 0 und 1 gesetzt....
    hat einer eine Idee wieso das so ist?



  • Kuldren schrieb:

    #define D3D_CUSTOMVERTEX2 (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)
    struct CUSTOMVERTEX2 {FLOAT x,y,z; D3DVECTOR NORMAL; DWORD color;FLOAT u,v;};
    

    Aehm, jo... f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)



  • TGGC schrieb:

    Kuldren schrieb:

    #define D3D_CUSTOMVERTEX2 (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)
    struct CUSTOMVERTEX2 {FLOAT x,y,z; D3DVECTOR NORMAL; DWORD color;FLOAT u,v;};
    

    Aehm, jo... f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)

    Danke nochmal!

    Hab das mit der Normalenberechnung nun auch hinbekommen.

    Allerdings will das mit der Stärke der Beleuchtung nicht so ganz hinhauen...

    a)
    Momentan habe ich diese Einstellungen:

    Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
              Device->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
    	  Device->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE);
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); 
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
    	  Device->SetRenderState(D3DRS_COLORVERTEX, FALSE);
    

    Da Modulate Standard bei der COLOROP ist, nehme ich an dass es oft verwendet wird, allerdings ist der Lichtkegel bzw Punkt auf der Oberfläche extrem schwach im Vergleich zu der "D3DTOP_ADD"-Einstellung.
    Nur das Problem bei "ADD" ist dass das Licht eben zu der Texturfarbe hinzuaddiert wird. Was bedeutet, dass selbst wenn kein Licht vorhanden ist, alles der Texturfarbe und somit auch Helligkeit entspricht. Dafür wird bei ADD der Spot des Lichts total weiß (wie gewollt) dargestellt - der Rest aber auch hell....
    Bei MODULATE hingegen ist ohne Licht alles dunkel, dafür ist selbst die stärkste Lichteinstellung:

    light.Diffuse.r = 1.0f;   
        light.Diffuse.g = 1.0f;    
        light.Diffuse.b = 1.0f;    
        light.Diffuse.a = 1.0f;
    

    so schwach dass es gerade Mal der Helligket der Textur entspricht.

    Meine Frage ist: Was muss ich ändern damit prinzipiell alles dunkel ist aber bei aktiviertem (stärksten) Licht der Spot komplett weiß ist?

    Mein Ziel ist es dass ich generell alles "normal" belichte (also der Texturhelligkeit entsprechend) aber eben auch Lichter einbauen kann die das ganze überbelichten. Sei es ein "Energieball" o. Ä.
    Das wäre mit MODULATE zwar möglich aber mich würde schon interessieren wie man das prinzipiell realisieren kann.

    b)
    Das seltsame ist...bei den oben (States) genannten Einstellungen werden sogar Objekte denen ich noch gar keine Vertexnormalen zugewiesen habe - aber ein Material, belichtet und nicht einfach ignoriert....Werden da automatisch Vertexnormalen berechnet?!?!

    Da muss es doch Standardeinstellungen geben oder? Habe schon einiges ausprobiert aber komme immer auf das gleiche Ergebnis (entweder ADD oder MODULATE)

    Jemand eine Idee?


  • Mod

    a) D3DTOP_MODULATE2X , damit hast du bei 0.5 0.5 0.5 die helligkeit der textur, 1. wird entsprechend doppelt so hell (notfalls D3DTOP_MODULATE4X probieren).

    b) afaik wird 0|0|1 (oder war es 0|1|0?) genommen. aber darauf sollte man sich nicht verlassen ;), lieber die richtigen werte uebergeben!



  • rapso schrieb:

    a) D3DTOP_MODULATE2X , damit hast du bei 0.5 0.5 0.5 die helligkeit der textur, 1. wird entsprechend doppelt so hell (notfalls D3DTOP_MODULATE4X probieren).

    Danke....aber die Helligkeit verwischt die Texturen eher als dass sie überbelichtet werden... 😕
    Ich werde jetzt ADD verwenden (in dem Projekt sollte es ohnehin nie dunkel sien) und mich damit beschäftigen wenn ich mal etwas programmiere wo ich absolute Dunkelheit brauche

    rapso schrieb:

    b) afaik wird 0|0|1 (oder war es 0|1|0?) genommen. aber darauf sollte man sich nicht verlassen ;), lieber die richtigen werte uebergeben!

    Ah ok ...sowas dachte ich mir schon...ich nehme an dass es standardmäßig auf 0|1|0 gesetzt wird.

    THX



  • Bei diffusem Licht ist das doch auch korrekt, das es nicht heller wird. Aber gibt ja auch so Sachen wie Specular. f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)



  • TGGC schrieb:

    Bei diffusem Licht ist das doch auch korrekt, das es nicht heller wird. Aber gibt ja auch so Sachen wie Specular. f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)

    nach den Diffuse-Zuweisungen folgt noch eine Specular=Diffuse Zuweisung...
    Hab ich nur nicht reinkopiert



  • Dann machst du wohl was falsch. f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)


  • Mod

    Kuldren schrieb:

    TGGC schrieb:

    Bei diffusem Licht ist das doch auch korrekt, das es nicht heller wird. Aber gibt ja auch so Sachen wie Specular. f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)

    nach den Diffuse-Zuweisungen folgt noch eine Specular=Diffuse Zuweisung...
    Hab ich nur nicht reinkopiert

    mach ne weitere stage mit D3DTA_SPECULAR und D3DTA_CURRENT die du aufaddierst. wenn ich gleich gewust haette dass du nur nen specular willst 😉



  • rapso schrieb:

    Kuldren schrieb:

    TGGC schrieb:

    Bei diffusem Licht ist das doch auch korrekt, das es nicht heller wird. Aber gibt ja auch so Sachen wie Specular. f'`8k

    Autocogito

    Gruß, TGGC (Der neue Game Star)

    nach den Diffuse-Zuweisungen folgt noch eine Specular=Diffuse Zuweisung...
    Hab ich nur nicht reinkopiert

    mach ne weitere stage mit D3DTA_SPECULAR und D3DTA_CURRENT die du aufaddierst. wenn ich gleich gewust haette dass du nur nen specular willst 😉

    Also so in der Art?

    Device->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
    	  Device->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
    	  Device->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
    
    	  Device->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_CURRENT);
    	  Device->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_SPECULAR);
    	  Device->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_ADD);
    
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE);
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_TEXTURE); 
    	  Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
    	  Device->SetRenderState(D3DRS_COLORVERTEX, FALSE);
    

    😕
    Sorry..bei den Stages kenn ich mich leider kaum aus...Besonders nicht was die Kombinationen betrifft
    Wie muss ich dann beim DrawCall die Stages auswählen?



  • *push*


Anmelden zum Antworten