Browse Source

- bone animations now also work with Disabled Materials Shader. There should be something missing, but it works. Strange...

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@222 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
ulfjorensen 17 years ago
parent
commit
d54c695be4
2 changed files with 31 additions and 21 deletions
  1. 9 1
      tools/assimp_view/Display.cpp
  2. 22 20
      tools/assimp_view/Shaders.cpp

+ 9 - 1
tools/assimp_view/Display.cpp

@@ -1988,7 +1988,15 @@ int CDisplay::RenderNode (aiNode* piNode,const aiMatrix4x4& piMatrix,
 					*tempmat++ = mat.d1; *tempmat++ = mat.d2; *tempmat++ = mat.d3; *tempmat++ = mat.d4; 
 					//tempmat += 4;
 				}
-				helper->piEffect->SetMatrixTransposeArray( "gBoneMatrix", (D3DXMATRIX*)matrices, 60);
+
+				if( g_sOptions.bRenderMats)
+				{
+					helper->piEffect->SetMatrixTransposeArray( "gBoneMatrix", (D3DXMATRIX*)matrices, 60);
+				} else
+				{
+					g_piDefaultEffect->SetMatrixTransposeArray( "gBoneMatrix", (D3DXMATRIX*)matrices, 60);
+					g_piDefaultEffect->CommitChanges();
+				}
 			}
 
 			// now setup the material

+ 22 - 20
tools/assimp_view/Shaders.cpp

@@ -260,19 +260,19 @@ std::string g_szDefaultShader = std::string(
 	"float3 vCameraPos : CAMERAPOSITION;\n"
 
 	// Bone matrices
-	"#ifdef AV_SKINNING \n"
+//	"#ifdef AV_SKINNING \n"
 	"float4x3 gBoneMatrix[60]; \n"
-	"#endif // AV_SKINNING \n"
+//	"#endif // AV_SKINNING \n"
 
 	// Vertex shader input structure
 	"struct VS_INPUT\n"
 	"{\n"
 		"float3 Position : POSITION;\n"
 		"float3 Normal : NORMAL;\n"
-		"#ifdef AV_SKINNING \n"
+//		"#ifdef AV_SKINNING \n"
 			"float4 BlendIndices : BLENDINDICES;\n"
 			"float4 BlendWeights : BLENDWEIGHT;\n"
-		"#endif // AV_SKINNING \n"
+//		"#endif // AV_SKINNING \n"
 	"};\n"
 
 	// Vertex shader output structure for pixel shader usage
@@ -295,16 +295,17 @@ std::string g_szDefaultShader = std::string(
 	"{\n"
 		"VS_OUTPUT Out;\n"
 
-		"#ifdef AV_SKINNING \n"
+//		"#ifdef AV_SKINNING \n"
 		"float4 weights = IN.BlendWeights; \n"
 		"weights.w = 1.0f - dot( weights.xyz, float3( 1, 1, 1)); \n"
-		"float3 objPos = mul( IN.Position, gBoneMatrix[IN.BlendIndices.x]) * weights.x; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.y]) * weights.y; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.z]) * weights.z; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.w]) * weights.w; \n"
-		"#else \n"
-		"float3 objPos = IN.Position; \n"
-		"#endif // AV_SKINNING \n"
+		"float4 localPos = float4( IN.Position, 1.0f); \n"
+		"float3 objPos = mul( localPos, gBoneMatrix[IN.BlendIndices.x]) * weights.x; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.y]) * weights.y; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.z]) * weights.z; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.w]) * weights.w; \n"
+//		"#else \n"
+//		"float3 objPos = IN.Position; \n"
+//		"#endif // AV_SKINNING \n"
 
 		// Multiply with the WorldViewProjection matrix
 		"Out.Position = mul( float4( objPos, 1.0f), WorldViewProjection);\n"
@@ -320,16 +321,17 @@ std::string g_szDefaultShader = std::string(
 	"{\n"
 		"VS_OUTPUT_FF Out;\n"
 
-		"#ifdef AV_SKINNING \n"
+//		"#ifdef AV_SKINNING \n"
 		"float4 weights = IN.BlendWeights; \n"
 		"weights.w = 1.0f - dot( weights.xyz, float3( 1, 1, 1)); \n"
-		"float3 objPos = mul( IN.Position, gBoneMatrix[IN.BlendIndices.x]) * weights.x; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.y]) * weights.y; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.z]) * weights.z; \n"
-		"objPos += mul( IN.Position, gBoneMatrix[IN.BlendIndices.w]) * weights.w; \n"
-		"#else \n"
-		"float3 objPos = IN.Position; \n"
-		"#endif // AV_SKINNING \n"
+		"float4 localPos = float4( IN.Position, 1.0f); \n"
+		"float3 objPos = mul( localPos, gBoneMatrix[IN.BlendIndices.x]) * weights.x; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.y]) * weights.y; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.z]) * weights.z; \n"
+		"objPos += mul( localPos, gBoneMatrix[IN.BlendIndices.w]) * weights.w; \n"
+//		"#else \n"
+//		"float3 objPos = IN.Position; \n"
+//		"#endif // AV_SKINNING \n"
 
 		// Multiply with the WorldViewProjection matrix
 		"Out.Position = mul( float4( objPos, 1.0f), WorldViewProjection);\n"