行矩阵列矩阵D3D&GL&U3D
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
}
行矩阵列矩阵D3D&GL&U3D的更多相关文章
- glm初试,关于行矩阵列矩阵问题
/*** * glm中矩阵是行优先存储的,这不同于opengl默认的以列优先存储的方式??,以下面矩阵mat为例 * 它是用四个行向量来模拟存储四个行:vec4 value[4],其中 * value ...
- 机器学习笔记 1 LMS和梯度下降(批梯度下降) 20170617
https://www.cnblogs.com/alexYuin/p/7039234.html # 概念 LMS(least mean square):(最小均方法)通过最小化均方误差来求最佳参数的方 ...
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- 各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
OpenGL 里面的矩阵 float m[16]; OpenGL中的矩阵是这样的 m[0] m[4] m[8] m[12] m[1] m[5] m[9] m[13] m[2] m[6] m[10] ...
- U3D中可以直接使用GL!!!
https://blog.csdn.net/u013172864/article/details/78860624
- 统一D3D与OpenGL坐标系统
作者:游蓝海(http://blog.csdn.net/you_lan_hai) DirectX 3D与OpenGL坐标系统的差异性,给我们带来非常大的麻烦.让跨平台编程的新手非常困惑.近期在做一个跨 ...
- WhyDX9:翻写D3D红龙书中的程序
之前写过一套学习OpenGL的框架:WhyGL,即然有了GL那也应该再写个学习D3D的框架:WhyDX9.两个程序的架构相同,然后这个程序是将D3D红龙那本书的DEMO翻写了一遍.先将可执行程序发一下 ...
- U3D DrawCall优化手记
在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...
- FFmpeg滤镜实现区域视频增强 及 D3D实现视频播放区的拉大缩小
1.区域视频增强 FFmpeg滤镜功能十分强大,用滤镜可以实现视频的区域增强功能. 用eq滤镜就可以实现亮度.对比度.饱和度等的常用视频增强功能. 推荐两篇写得不错的博文: (1)ffmpeg综合应用 ...
随机推荐
- Oracle GI 日志收集工具 - TFA 简介
转载自:https://blogs.oracle.com/Database4CN/entry/tfa_collector_%E4%BB%8B%E7%BB%8D 1.TFA的目的: TFA是个11.2版 ...
- Elasticsearch 知识点
Elasticsearch 知识点 table th:first-of-type { width: 200px; } table th:nth-of-type(2) { } 功能 curl命令 运行 ...
- Promise 知识点
.done() Promise 对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为 Promise 内部的错误不会冒泡到全局).因此,我们可以提供 ...
- Hadoop和云计算
什么是Hadoop? Hadoop代表的就是基于异步存储(HDFS)的并行计算(Map-Reduce). 首先Hdsf/ Kudu他的存储是分布式的存储,hive(map-reduce).impala ...
- WinForm下ComboBox设定SelectedValue总结 (SelectedValue==null解决办法)[转]
http://www.cnblogs.com/qqflying/archive/2013/05/23/3096050.html 实践发现:以SelectedIndex赋值让ComboBox自动选中时能 ...
- ADO.NET EF 中的实体修改方法
http://www.cnblogs.com/zfz15011/archive/2010/05/30/1747486.html 1.传统修改模式,看下列代码 using (NorthwindEntit ...
- mysql实战优化之九:MySQL查询缓存总结
mysql Query Cache 默认为打开.从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销. mysql ...
- 为什么 JVM 不用 JIT 全程编译
从知乎扣出来的内容 https://www.zhihu.com/question/37389356 作者:RednaxelaFX链接:https://www.zhihu.com/question/37 ...
- JNDI的学习与使用
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- 第13章 TCP编程(1)_socket套接字
1. socket套接字 (1)套接字简介 ①socket是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段. ②Linux中的 ...