Mit Shadern 2 Texturen verwalten ?
-
Hi,
Ich arbeite mich gerade in vertex/pixel shader ein. Die Shader funktionieren mit 1.er Textur wunderbar!!! Probleme gibt es wenn ich eine 2. Textur hinzufüge !!
-> Mein test polygon wird einfach nicht mehr angezeigtAlso hier erstmal meine Strukturen:
#define D3DFVF_VERTEX_TEX2 ( D3DFVF_XYZ | D3DFVF_TEX2 ) struct texcoord_t { FLOAT x,y; }; struct vertex3d_tex2_t { FLOAT x,y,z; texcoord_t tex[2]; };
So hier speicher ich dann meine 2 dreiecke(polygon).
Sicherheitshalber poste ich mal hier den COde:
vertex3d_tex2_t vVertices[] = { { 0.0f, 0.0f, 3.0f, 0.0f, 1.0f, /*0.0f, 1.0f,*/ }, { 0.0f, 1.0f, 3.0f, 0.0f, 0.0f, /*0.0f, 0.0f,*/ }, { 1.0f, 0.0f, 3.0f, 1.0f, 1.0f, /*1.0f, 1.0f,*/ }, { 0.0f, 1.0f, 3.0f, 0.0f, 0.0f, /*0.0f, 0.0f,*/ }, { 1.0f, 1.0f, 3.0f, 1.0f, 0.0f, /*1.0f, 0.0f,*/ }, { 1.0f, 0.0f, 3.0f, 1.0f, 1.0f, /*1.0f, 1.0f,*/ }, };
So bisher dürfe eig. alles regelrecht sein.
Hier ist dann meine Vertexelement9 struktur mit folgenden Daten:
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 } { 0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 } { 0, 20, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }
So und zu guter letzt setzte ich die beiden Texturen.
m_pGraphicDevice->GetDevice()->SetTexture( 0, m_pTexture ); m_pGraphicDevice->GetDevice()->SetTexture( 1, m_pBumpmap );
Das müsste doch reichen die Texturen einfach zu setzten, oder muss ich da noch besondere einstellungen vornhemen ?..
So, .. Hier kommt dann noch der Pixel/VertexShader
// Base VertexShader, v.1.1 // ************ Register Defines ************************** #define vertex_position v0 #define vertex_tex0 v3 #define vertex_tex1 v4 #define light_color0 c32;leer #define mat_proj c0 vs.1.1 dcl_position0 vertex_position dcl_texcoord0 vertex_tex0 dcl_texcoord1 vertex_tex1 m4x4 oPos, vertex_position, mat_proj mov oD0, light_color0 ;texturecoordinaten dem pixelshader übergeben mov oT0, vertex_tex0 mov oT1, vertex_tex1 ;END
PixelShader:
-----------// Base PixelShader.1.1 ps.1.1 tex t0 add r0, v1, v0 mul r0, r0, t0 ;END
Bin für jede Hilfe Dankbar!!
Bye
-
Habe jetzt nicht die ahnung von Shadern aber was mir sofort auffällt ist der Pixel Shader.
ps.1.1
tex t0
add r0, v1, v0
mul r0, r0, t0tex t0 ist die 1. Textur. Wo ist die 2. Textur ? und die andere Sache ist das die 2. Textur dann noch irgendwie in die Rechnung rein muss.
-
Hi,
Danke erstmal für die Antwort.Es ist ja im Prinzip egal ob ich ob ich Texel_1 [op] Texel_2 mache. Also ob ich Pixel von Textur1 mit Pixel von Textur2 multipliziere, dividiere... oder so.
Ich hab einfach den Pixel von Texture0 verwendet.
Und wenn der Fehler am PixelShader liegen sollte, müsste trotzdem ein schwarzes Polygon auftauchen(da schlimmstenfalls wäre Pixel der Pixel 0x00.. ist ), was nicht der Fall ist.
Also muss es entwender an der Deklaration oder am VertexShader oder falschen Einstelllungen am Device oder so liegen.
Bye
-
*push*
-
liefert dir d3d einen errorstring beim compilieren der shader?
rapso->greets();
-
Hi,
nein. leider nicht.
Bye
-
Und evtl. die DX Debug runtimes zur Laufzeit?
-
Hi,
Nein, leider auch nicht. Das war das erste was ich geschaut hab!!.Ich glaub aber, das nur das Setzten der Texture nicht ausreicht!!
m_pGraphicDevice->GetDevice()->SetTexture( 0, m_pTexture ); m_pGraphicDevice->GetDevice()->SetTexture( 1, m_pBumpmap );
Bye
-
Na dann lass halt deinen Schader mal weg und schau ob die Texturen so da sind. Evtl. ist ja auch gar kein Poly mehr zu sehen, weil du irgendwoanders was kaputt gemacht hast.