行矩阵列矩阵D3D&GL&U3D
2024-10-10 02:24:31
void Start () {
//矩阵函数原型:Matrix4x4(Vector4 colum0, Vector4 colum1, Vector4 colum2, Vector4 colum3),这说明U3D使用列矩阵,同opengl
//因此矩阵是左乘的,DX是行矩阵,矩阵是右乘的。
//在DX中WVP矩阵组合为 W*V*P, 而GL中MVP矩阵组合为 P*V*M
Matrix4x4 tm = new Matrix4x4(new Vector4(, , , ), new Vector4(,,,),new Vector4(,,,),new Vector4(,,,));
Vector4 pt4 = new Vector4(, , , );
Vector3 pt3 = new Vector3(, , ); //var pt4t = pt4*tm; //编译出错,没有定义这种乘法,不支持右乘!
var pt4t = tm*pt4;
var pt4tt = tm.transpose*pt4; //矩阵转置-变为行矩阵
var pt3t = tm*pt3;
var pt3tt = tm.transpose*pt3; //实际是 tm.transpose * (0,0,0,0),U3D将vector3扩展为w为0,而不是像DX那样将w扩展为1 //总结:在U3D中,
//1,矩阵是列矩阵,必须左乘,U3D未定义矩阵右乘向量这种操作
//2,vector3(x,y,z)与矩阵相乘时,vector3被扩展为vector4(x,y,z,0)
Debug.Log(pt4t.x + "," + pt4t.y+","+ pt4t.z); //0,0,0
Debug.Log(pt4tt.x + "," + pt4tt.y+","+ pt4tt.z); //3,0,0
Debug.Log(pt3t.x + "," + pt3t.y+","+ pt3t.z); //0,0,0
Debug.Log(pt3tt.x + "," + pt3tt.y + "," + pt3tt.z);//0,0,0 //3,鉴于2的情况,U3D中操作顶点变换最好使用函数,如下
var tx = tm.transpose.MultiplyPoint(pt3t);
Debug.Log(tx.x + "," + tx.y + "," + tx.z); //3,0,0 }
最新文章
- Asp.Net MVC4入门指南(5):从控制器访问数据模型
- gdb调式
- 编译@Override报错
- DataTables语言国际化
- Object-c学习之路九(字典(NSDictionary&;NSMutableDictionary))
- Oracle学习之Oracle 树操作(select…start with…connect by…prior)
- Highlighting an element as it is hovered over (like inspect element in FireBug) - jQuery Forum
- Oracle之分组函数嵌套以及表连接
- springmvc4.0配置ajax请求json格式数据
- Bash中的测试——test, [], [[]], (())
- 1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏
- 9.7、Libgdx之振动器
- 阮一峰:Flex 布局教程
- java基础 (二)之HashMap,HashTable,ConcurrentHashMap区别
- Arduino语法详解_含示例详解
- mui longtap 事件无效
- oracle 存储过程模板
- Java基础知识你知道多少?
- Java(C#)基础差异-数组
- 数据库查询语句报错-ORA-00911: invalid character