Hallo,
ich versuche schon seit einigen Tagen einen VertexShader ans laufen zu bekommen der mir mein Skinning übernimmt. Ich teste mich langsam vorran aber bin jetzt an einem Punkt an dem es einfach nicht weiter geht.
Im boneMatrixArray sind zu testzwecken alle Matrizen gleich und zwar sind es WorldViewProjectionMatrizen. Der Untere HLSL code funktionier,
wenn ich jetzt aber die Zeile so abänder, existiert laut PIX kein VertexShader
|
C-/C++-Quelltext
|
1
|
output.position = mul( float4( input.position.xyz, 1.0 ), boneMatrixArray[ input.blendI[ 0 ] ] );
|
In der blendI Variable ist laut PIX auch der Richtige Wert enthalten.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
float4x4 WorldViewProj : WorldViewProjection;
float4x4 boneMatrixArray[ 64 ];
struct VS_input {
float4 position: POSITION;
float4 blendW: BLENDWEIGHT;
float4 blendI: BLENDINDICES;
};
struct VS_output {
float4 position : POSITION;
float4 color: COLOR0;
};
VS_output mainVS( VS_input input ) {
VS_output output = ( VS_output )0;
output.position = mul( float4( input.position.xyz, 1.0 ), boneMatrixArray[ 0 ] );
return output;
}
technique technique0 {
pass p0 {
CullMode = None;
VertexShader = compile vs_3_0 mainVS();
}
}
|
Vertex Struktur
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
struct customvertex {
float vertex[ 3 ];
float blendWeights[ 4 ];
DWORD blendIndices;
};
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
D3DVERTEXELEMENT9 dec[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDWEIGHT, 0 },
{ 0, 28, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDINDICES, 0 },
D3DDECL_END()
};
|
Wenn ich im Shader
|
C-/C++-Quelltext
|
1
|
input.blendI[ 0 ] = 0;
|
setze funktionoert alles. Ich vermute das es entweder an der Vertexdeclaration liegt obwohl ich hier schon viel durchprobiert habe (FLOAT4 usw.) oder die Bits irgendwie vom Shader anders verstanden werden. Ich hoffe jemand kann mir sagen wie ich das Problem lösen kann
Ach ja : Es ist in eine *.fx Datei die so geladen wird.
|
C-/C++-Quelltext
|
1
|
D3DXCreateEffectFromFile
|