Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.02.2011, 21:40

HLSL Shader existiert laut PIX nicht

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