Sign in to follow this  
Dreamy

[MDX] Animated meshes with HLSL [Semi-Solved]

Recommended Posts

Everything with fixed function was working pretty well in my vb engine, now I'm updating it to use shaders, the static meshes have been quite easy to integrate with the excellent tutorials out there and some posts from this forum but the problem is coming with animated meshes, I've found a c# port of the simple animation sample. I'm using the same shader to start working so I adapted the changes to my engine to get it working but although I'm not getting any error neither tiny.x nor an animated cylinder I've created for testing purposes are showing on my render form, I'm including my DrawMeshContainer code that did work with ff but not with shaders. Any help would be appreciated. 'Not including the whole method xoDevice.RenderState.IndexedVertexBlendEnable = True Dim attribIdPrev As Integer = -1 Dim iattrib As Integer = 0 For iattrib = 0 To mesh.NumeroAtributos - 1 Dim numBlend As Integer = 0 Dim bones() As BoneCombination = mesh.Bones Dim i As Integer = 0 For i = 0 To mesh.NumeroInfluencias - 1 If bones(iattrib).BoneId(i) <> -1 Then numBlend = i End If Next If xoDevice.DeviceCaps.MaxVertexBlendMatrices >= numBlend + 1 Then Dim offsetMatrices() As Matrix = mesh.OffsetMatrices Dim frameMatrices() As ExFrame = mesh.Frames Dim clippedBoneMatrices(mesh.NumeroInfluencias - 1) As Matrix For i = 0 To mesh.NumeroInfluencias - 1 Dim matrixIndex As Integer = bones(iattrib).BoneId(i) If matrixIndex <> -1 Then Dim tempMatrix As Matrix = offsetMatrices(matrixIndex) * frameMatrices(matrixIndex).MatrizTransformacionCombinada clippedBoneMatrices(i) = tempMatrix End If Next foefecte.SetValue("mWorldMatrixArray", clippedBoneMatrices) foefecte.SetValue("CurNumBones", mesh.NumeroInfluencias - 1) xoDevice.RenderState.VertexBlend = CType(numBlend, VertexBlend) If (attribIdPrev <> bones(iattrib).AttributeId) Or (attribIdPrev = 1) Then Dim tempMateriales() As ExtendedMaterial = mesh.GetMaterials 'we add light contributions Dim color1 As Color = tempMateriales(bones(iattrib).AttributeId).Material3D.Ambient Dim color2 As Color = Color.FromArgb(255, 64, 64, 64) Dim color3 As Color = tempMateriales(bones(iattrib).AttributeId).Material3D.Emissive Dim ambEmm As Color = Microsoft.DirectX.Direct3D.ColorOperator.Modulate(color1, color2) ambEmm = ColorOperator.Add(ambEmm, color3) Dim color4 As ColorValue = ColorValue.FromColor(tempMateriales(bones(iattrib).AttributeId).Material3D.Diffuse) 'set color proerties in the shader foefecte.SetValue("MaterialDiffuse", color4) foefecte.SetValue("MaterialAmbient", ColorValue.FromColor(ambEmm)) Dim tempTextures() As Texture = mesh.Textura xoDevice.SetTexture(0, tempTextures(bones(iattrib).AttributeId)) attribIdPrev = bones(iattrib).AttributeId End If foefecte.CommitChanges() Dim pasActual As Integer = 0 Dim pasos As Integer = foefecte.Begin(FX.DoNotSaveState) For pasActual = 0 To pasos - 1 foefecte.BeginPass(pasActual) mesh.MeshData.Mesh.DrawSubset(iattrib) foefecte.EndPass() Next foefecte.End() End If Next Edit: I forgot to set the view projetion matrix, now the meshes are showing but some vertices are doing weird things, I've got to try some more things. [Edited by - Dreamy on June 6, 2006 5:31:15 PM]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this