被skinned mesh 折磨了 好久,开始感觉skinindices不对,因为pix显示里面全是0
后来跟来跟去发现是这样的,那些uchar的整数被pix用float的格式显示出来 (显示为0.0000000而不是按照生命的uint显示为0)
变成很小的数所以是0.00000
这样skinindices 就也是对的了 weight看起来也是对的 因为加起来等于1
哦对了 phyre的d3d11要把shader里面的semantic
skinindices :BLENDINDICES;
skinweights :BLENDWEIGHTS;
要这么写,不能就写个color0 看起来它是由后面的sementic来确定的
chr的skin运动起来看起来是蜘蛛一样的,并没有拉伸到无穷远,也没有很乱,说明还是比较正确的,只是哪里。。比如没有unormalize或者范围被扩大了(float 才要normalize 这个排除了
weight错误我也大概能认出来了 是会有蹼状的拉伸
矩阵如果没有转置会有三角片那样像无限远拉伸
这种在一个范围内的拉伸反向,看起来是比如把脚跟的matrix乘到了膝盖膝盖上,skintransform看起来也是对的,所以还是skinindices不对,位置不对。。。感觉是这样
偶然发现了pix显示buffer的方法,在layout那页把你的类型写进去就可以了,那页相当于脚本。
这样就奇怪了 因为skinindices还是0
.。。。。。skinindices并不是0 前面有些frame是0是因为那些frame里还没画
后面找到了数据完全正确的skinindiceds 和weight 矩阵看起来也对
就只有mul的问题了 也就是一开始就最先怀疑的rowmajor的问题
被semantic这个问题遮蔽了
这下人物也正常了 只有define mul(a,b)mul((b),(a))好使就一切ok啦
上次升级我大概是手动改的mul 这次一定要找到一个宏
准备用u4 的处理方法
//////if you genetated matrix (float3X3(VectA,VectB,VectC)),you must use mul else use MulMatrix means you passed through a matrix para
if defined XX
define MulMatrix(Mtx, Vect) mul(Vect, Mtx)
这是个比较全面的解决方案,忽略我前面文章说的 单纯define mul(a,b)mul((b),(a))这种方法