Probleme bei Vertex-Pixel Shadern



  • Hi,
    Naja, ok Schade.

    Also ich hab gerade versucht, je weiter ein Pixel weg ist, je mehr wird der Pixel mit seiner Farbe multipliziert.. Der Effekt sollte Dunkel-Hell herrauskommen wenn sich die Vertices bewegen(weg,her). Aber das funtzt nicht.

    Vielleicht findet ihr ein Fehler..

    // Vertex Shader for 1.1
    
    // ************ Register Defines ************************** \\
    
    #define VertexPosition			v0
    #define VertexNormal			v1
    #define VertexTexCoord			v2
    #define VertexColor				v3
    
    #define LightVertexDiff			r0
    #define LightVertexVec			r1
    
    #define ProjectionMatrix		c0
    
    #define LightPosition			c6
    #define LightDirection			c5
    
    #define AmbientLight			c4
    
    // ************ Output Register ************************** \\
    
    #define out_2DVertexPosition	oPos
    
    #define out_PixelColor0			oD0	
    #define out_PixelColor1			oD1
    
    #define out_TextureColor0		oT0
    #define out_TextureColor1		oT1
    #define out_TextureColor2		oT2
    #define out_TextureColor3		oT3
    #define out_TextureColor4		oT4
    #define out_TextureColor5		oT5
    #define out_TextureColor6		oT6
    #define out_TextureColor7		oT7
    
    vs.1.1
    
    dcl_position0	VertexPosition
    dcl_normal0		VertexNormal
    dcl_texcoord0	VertexTexCoord
    dcl_color0		VertexColor
    
    ; project 3d vertex to 2d coord
    m4x4 out_2DVertexPosition, VertexPosition, ProjectionMatrix
    
    sub r1,c6, v0
    dp3 r1,r1,r1  ; quadratische laenge 
    rsq r2,r1.x   ;reciproxe wurzel 
    mul r1,r1,r2  ;division durch die wurzel ... sqrt(x)=x/sqrt(x
    
    rcp r3, r1
    
    mul out_PixelColor0, r3, VertexColor
    

    Bye


  • Mod

    " Aber das funtzt nicht. " undefined const

    bitte definiere das 🙂

    rapso->greets();



  • HM ?


  • Mod

    was passiert stattdessen? bzw. welches ergäbniss hast du genau erwartet und wie genau unterscheidet sich das bzw. was siehst du was nicht so sein sollte?

    rapso->greets();



  • Die Farbe ist von der Ausgangsfarbe verdunkelt und bleibt konstant.


  • Mod

    wie gross ist das objekt dass die farbe haben soll? die range der farben geht von 0.f bis 1.f, falls dein objekt also viel größer ist als 1.f (in ausmassen) oder viel kleiner, dann siehst du nicht den 0 bis 1 bereich der den farbverlauf hat.

    schau ma auf meine engine hp, da ist ein screenie wie's ausschaut wenn man die position reinschreibt.
    dafür hab ich die inverse der objektgröße als const gespeichert (also 1.f/größe) und dann mit dem längenwert jedes punktes multipliziert. (das dann aber im pixelshader und nicht im vertexshader)
    vielleicht ist dein objekt nicht hoch im zentrum und hat von vorherein schon werte die die ganze zeit über 1 oder unter 0 sind 🙂

    rapso->greets();



  • Ich hab ein ganz normales viereck ( 2 dreiecke ) :

    VERTEX v[4] = {   
          { -1.0f, -1.2f, 0.0f, /*0.0f, 0.0f, -1.0f, /*0.0f, 1.0f,*/ D3DCOLOR_ARGB( 255, 255, 0, 0 ) },
          { -1.0f,  1.2f, 0.0f, /*0.0f, 0.0f, -1.0f, /*0.0f, 0.0f,*/ D3DCOLOR_ARGB( 255, 255, 255, 0 ) },
          {  1.0f,  1.2f, 0.0f, /*0.0f, 0.0f, -1.0f, /*1.0f, 0.0f,*/ D3DCOLOR_ARGB( 255, 255, 0, 255 ) },
          {  1.0f, -1.2f, 0.0f, /*0.0f, 0.0f, -1.0f, /*1.0f, 1.0f,*/ D3DCOLOR_ARGB( 255, 255, 255, 255 ) },
          };
    

    Bye


  • Mod

    und die siehst du beide _ganz_ bloss in der falschen färbung?

    rapso->greets();



  • Hi,

    Jo, sind beide da. Also ich seh auch die Farben. Nur verdukelt und konstant.



  • Komisch, das müsste gehen



  • Komisch, das müsste gehen


  • Mod

    das problem ist, dass du nur 4punkte hast und die sind recht weit von der mitte weg, das heißt, die sind schon relativ dunkel und da du nur pro vertex die farben berechnest, wird zwischen den 4 dunklen stellen interpoliert.

    müßte also dunkel sein. weil du ja die farben durch die entfernung teils und nur 4 relativ weit entfernte punkte hast, also teilst du immer durch >1 und die farben werden dunkler.

    set mal einen punkt noch in die mitte (oder generier dir ein höcher tesseliertes mesh)

    rapso->greets();



  • Hi,
    Die Vertices bewegen sich aber ständig ?


  • Mod

    falls du sie _nur_ mit der viewmatrix bewegst:

    sub r1,c6, v0
    

    da nimmste die untransformierten werde

    rapso->greets();



  • Hi,

    falls du sie _nur_ mit der viewmatrix bewegst:

    Ich denk, ich weiß woran es light.......

    Ich verwende immer den untranformierten vertex


  • Mod

    lol
    das schrieb ich doch 😉



  • Hi,

    funtzt nu wunderbar. THX

    Achja:
    Gibt es eig. große unterschiede zwischen HLSL und asm ?
    Oder ist es egal ?

    Bye



  • BBC schrieb:

    Hi,

    funtzt nu wunderbar. THX

    Achja:
    Gibt es eig. große unterschiede zwischen HLSL und asm ?
    Oder ist es egal ?

    Bye

    Kloar. HLSL und Cg sind C-like, und nicht ASM...


  • Mod

    das lustige dabei ist, dass die ganzen c++ wörter auch schon reserviert sind.. vielleicht hat man ja in dx10 cg++ 🙂

    scene->objects->LOD->mesh->poly->next->next->next->next->draw();

    🙂

    rapso->greets();


Anmelden zum Antworten