Results 1 to 5 of 5

Thread: cg shader - vertex colour des meshes auslesen

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Die Farben sind wirklich den Punkten zugeordnet, auf dem Mesh befindet sich keine Textur. Ich hab jetzt das ganze nochmal ohne FX Composer direkt in 3dsmax/ofusion versucht, und es ging. Keine Ahnung, ob etwas beim Import in Composer nicht geklappt hat, oder ob ich beim für 3dsmax/ofusion neu schreiben unbewusst den Fehler beseitigt habe. In der .x Datei scheinen jedenfalls auch alle vertex farben angegeben gewesen zu sein.

    Der jetzt zumindest für Ogre/3dsmax/ofusion funktionierende code (gleich um das texture blending erweitert)
    Code:
    void vp_vcolor(
    	float3 iPosition		: POSITION,
    	float3 iNormal			: NORMAL,
    	float4 iColor			: COLOR,
    	float2 iTexCoord01		: TEXCOORD0,
    	float2 iTexCoord02		: TEXCOORD1,
    	float2 iTexCoord03		: TEXCOORD2,
    	//float2 iTexCoord04		: TEXCOORD3,
    	
    	out float4 oPosition	: POSITION,
    	out float4 oColor		: COLOR,
    	out float2 oTexCoord01	: TEXCOORD0,
    	out float2 oTexCoord02	: TEXCOORD1,
    	out float2 oTexCoord03	: TEXCOORD2,
    	//out float2 oTexCoord04	: TEXCOORD3,
    	
    	uniform float4x4 worldViewProj
    	)
    {
    	oPosition = mul(float4(iPosition•••••, 1.0), worldViewProj);
    	oColor = iColor;
    	
    	//TeCoords
    	oTexCoord01 = iTexCoord01;
    	oTexCoord02 = iTexCoord02;
    	oTexCoord03 = iTexCoord03;
    	//oTexCoord04 = iTexCoord04;
    }
    
    //-----------------------------------
    void fp_vcolor(
    	float4 iPosition		: POSITION,
    	float4 iColor			: COLOR,
    	float2 iTexCoord01		: TEXCOORD0,
    	float2 iTexCoord02		: TEXCOORD1,
    	float2 iTexCoord03		: TEXCOORD2,
    	//float2 iTexCoord04		: TEXCOORD3,
    	
    	out float4 oColor		: COLOR,
    	
    	uniform sampler2D texture01,
    	uniform sampler2D texture02,
    	uniform sampler2D texture03
    	//uniform sampler2D texture04
    	)
    {
    	//oColor = tex2D(texture01, iTexCoord01)*(1-iColor.r)*(1-iColor.g)*(1-iColor.b);
    	oColor = tex2D(texture01, iTexCoord01)*iColor.r;
    	oColor = oColor +  tex2D(texture02, iTexCoord02)*iColor.g;
    	oColor = oColor +  tex2D(texture03, iTexCoord03)*iColor.b;
    	
    }



    Quote Quote
    Ich hab nicht viel Erfahrung mit dem fxComposer... aber wenn ich mit OpenGL Shader-Programme auf die Karte geladen habe, hatte ich für Vertex und Fragment Shader getrennte Codes, darüberhinaus hatten die alle einen definierten (main) Einstiegspunkt.
    Nvidias cg erlaubt es auch, vertex und fragment shader in dieselbe Datei zu schreiben. Die Einstiegspunkte waren in fx composer in einem pass und für ofusion in einer .program Datei angegeben.

    Quote Quote
    Rein vom Verständnis her: Du hast im Vertexshader Texturkoordinaten? Bist du da nicht noch ein klein wenig zu früh dran?
    So wie ich das mitbekommen habe müssen alle Inputs eines Fragment Shaders als Output eines Vertex Shaders angegeben sein. Desshalb hab ich gleich beim Vertex Shader die Koordinaten angenommen und weitergegeben. Hätt ich das auslassen können und nur beim Fragment Shader die Koordinaten holen können? Njo, gleich mal testen, wär um einiges übersichtlicher.

    Was leider nicht geklappt hat, ist den farblosen stellen ebenfalls eine Textur zuzuweisen.
    "//oColor = tex2D(texture01, iTexCoord01)*(1-iColor.r)*(1-iColor.g)*(1-iColor.b);" sollte eine vierte Textur an die farblosen stellen setzen was auch funktioniert hat aber nur mit einer weiteren Textur. Bei 3 Texturen gabs einen "too much arithmetic operations" fehler.

    Quote Quote
    Meine Programme haben nämlich immer ganz anders ausgesehen
    Hast du deine Shader in GLSL geschrieben? Wenn ja, ist die Syntax vergleichbar mit cg? Wollt mich nämlich auch mal an GLSL ranwagen und das würds natürlich vereinfachen.

    Last edited by nudelsalat; 19.11.2006 at 19:41.

  2. #2
    Ich hab die Dinger auch mit Cg geschrieben, allerdings dann aufs ARB-Profil übersetzt und direkt mit OpenGL auf die Grafikkarten-Einheiten geladen...

    wie dringend ist es? Wenn ich morgen etwas Zeit finde, werd ich mir den Composer installieren und selbst rumprobieren

  3. #3
    Danke für das Angebot. Nachdem das ganze aber jetzt zumindest in 3dsmax funktioniert, ist es nicht mehr dringend. Wäre natürlich für nächstes mal gut zu wissen woran es gelegen hat, dass die Vertex Colours nicht übergeben wurden. Shader schreiben ist ohne Composer nicht sehr komfortabel, besonders da 3dsmax bei fehlerhafter Syntax abstürzt.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •