|
已成功得到4行数值:
float4 mx0; float4 mx1; float4 mx2; float4 mx3;
现将这4行整合为矩阵,float4x4 mx;
以下各种方法都失败了:
1,逐个元素赋值
mx._11 = mx0.x;
mx._12 = mx0.y;
mx._13 = mx0.z;
mx._14 = mx0.w;
mx._21 = mx1.x; mx._22 = mx1.y;
mx._23 = mx1.z; //运行到这里时,第1行已经变0了
mx._24 = mx1.w;
mx._31 = mx2.x; mx._32 = mx2.y; mx._33 = mx2.z; mx._34 = mx2.w;
mx._41 = mx3.x; mx._42 = mx3.y; mx._43 = mx3.z; mx._44 = mx3.w; //运行到这里时,前3行都变1了,最后行数值奇大
2,合并赋值
float4x4 mx = {mx0, mx1, mx2, mx3}; //与上面一样,前3行都变1了,最后行数值奇大
3,逐行赋值
mx[0] = mx0;
mx[1] = mx1;
mx[2] = mx2;
mx[3] = mx3; //与上面一样,前3行都变1了,最后行数值奇大
4,构造
float4x4 mx = float4x4(
mx0.x, mx0.y, mx0.z, mx0.w,
mx1.x, mx1.y, mx1.z, mx1.w,
mx2.x, mx2.y, mx2.z, mx2.w,
mx3.x, mx3.y, mx3.z, mx3.w); //与上面一样,前3行都变1了,最后行数值奇大
调试时发现,修改一个元素总是影响到存储位前后的元素,这是导致异常的原因,却想不到解决办法
(这是按列存储的矩阵)比如:
写 mat._21, 那么 mat._11 和 mat._31 会被修改
写 mat._23, 那么 mat._13 和 mat._33 会被修改
如果矩阵是全局变量,那么外部使用 EffectParameter.SetValue可以
这里是VS中的局部变量。
请诸位仁兄帮帮忙 |
|