游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1800|回复: 0

HLSL中 矩阵赋值

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2011-6-27 12:40:00 | 显示全部楼层 |阅读模式
已成功得到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中的局部变量。

请诸位仁兄帮帮忙
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-7 04:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表