【转载】D3DXVec3TransformNormal and D3DXVec3TransformCoord
原文:D3DXVec3TransformNormal and D3DXVec3TransformCoord
D3DXVec3TransformCoord 对向量进行变换,没啥好说明的,默认向量为行向量,矩阵为列矩阵。
D3DXVec3TransformNormal 这个家伙对法线进行变换,其实就是对于方向性的向量进行变换,在计算中经常用来变换方向,“D3DXVec3TransformNormal transforms a normal using the transpose of the inverse of the given matrix”,他对向量进行变换时,会使用您提供的参数矩阵,先进行逆矩阵计算,再进行转置,然后变换向量,结果就是你想要的。
坐标和向量是有区别的:向量的第四维数值是0,坐标的第四维数值是1
向量 =两个坐标的差值 第四维同样做减法,结果是0
向量的坐标变换用D3DXVec3TransformNormal,
点的变换用D3DXVec3TransformCoord。
D3DXVec3Transform和D3DXVec3TransformCoord相似,区别在于后者变换后将w投射回1
实际执行计算的时候是:
D3DXVec3TransformCoord
VOut.x = V1.x * M.11 + V1.y * M.21 + V1.z * M.31 + M.41
VOut.y = V1.x * M.12 + V1.y * M.22 + V1.z * M.32 + M.42
VOut.z = V1.x * M.13 + V1.y * M.23 + V1.z * M.33 + M.43
因为是向量,第四维不计算:
D3DXVec3TransformNormal
VOut.x = V1.x * M.11 + V1.y * M.21 + V1.z * M.31
VOut.y = V1.x * M.12 + V1.y * M.22 + V1.z * M.32
VOut.z = V1.x * M.13 + V1.y * M.23 + V1.z * M.33
D3DXVec3TransformCoord 函数
用矩阵变换3-D向量,并且用w = 1投影结果。
定义:
D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord(
D3DXVECTOR3 *pOut,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM
);
Parameters
pOut
[in, out] 指向 D3DXVECTOR3 结构的操作结果。
pV
[in] 指向 D3DXVECTOR3 结构的向量。
pM
[in] 指向 D3DXMATRIX 结构的变换矩阵。
Return Value
指向 D3DXVECTOR3 结构的变换后的向量。
说明:
这个函数用矩阵pM变换3-D向量pV (x, y, z, 1),并且用w = 1投影结果。
函数返回值跟pOut 参数返回值是一样的。这样可以让函数D3DXVec3TransformCoord作为其它函数的参数使用。
函数信息:
Header |
d3dx9math.h |
Import library |
d3dx9.lib |
Minimum operating systems |
Windows 98 |
函数相关:
D3DXVec3Transform, D3DXVec3TransformNormal
【转载】D3DXVec3TransformNormal and D3DXVec3TransformCoord的更多相关文章
- 转:D3DXVec3TransformNormal() 与 3DXVec3TransformCoord() 的区别
DirectX中有两个很相似的函数,输入与输出的参数格式完全一样,都是输入一个三维向量(D3DXVECTOR3)和一个矩阵(D3DXMATRIX),输出变换之后的向量(D3DXVECTOR3). 函数 ...
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...
- RTP与RTCP协议介绍(转载)
RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...
- 《Walking the callstack(转载)》
本文转载自:https://www.codeproject.com/articles/11132/walking-the-callstack Download demo project with so ...
- [转载]MVVM模式原理分析及实践
没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Wi ...
- [转载]:STM32为什么必须先配置时钟再配置GPIO
转载来源 :http://blog.csdn.net/fushiqianxun/article/details/7926442 [原创]:我来添两句,就是很多同学(包括我)之前搞低端单片机,到了stm ...
- [转载]从MyEclipse到IntelliJ IDEA-让你摆脱鼠标,全键盘操作
从MyEclipse转战到IntelliJ IDEA的经历 注转载址:http://blog.csdn.net/luoweifu/article/details/13985835 我一个朋友写了一篇“ ...
- TCP同步与异步,长连接与短连接【转载】
原文地址:TCP同步与异步,长连接与短连接作者:1984346023 [转载说明:http://zjj1211.blog.51cto.com/1812544/373896 这是今天看到的一篇讲到T ...
- 在CentOS 7/6.5/6.4 中安装Java JDK 8(转载)
转载在CentOS 7/6.5/6.4 中安装Java JDK 8 首先,在你的服务器上运行一下更新. yum update 然后,在您的系统上搜索,任何版本的已安装的JDK组件. rpm -qa | ...
随机推荐
- myeclipse run按钮不见了
window-->new window,打开新窗口,按钮出现了.关闭老窗口,再关闭新窗口.再次打开MyEclipse,妥妥的了.
- CSS样式命名规则
1.样式命名外 套: wrap主导航: mainnav子导航: subnav页 脚: footer整个页面: content页 眉: header页 脚: footer商 标: label标 题: t ...
- 【js】五子棋-UI学习
http://www.imooc.com/learn/639 棋盘用canvas实现
- 27、springboot整合RabbitMQ(1)
RabbitMQ整合 使用dockers下载带management的版本,该版本是带web界面的,可操作性比较强
- 《metasploit渗透测试魔鬼训练营》学习笔记第九章--meterpreter
七.强大的meterpreter 7.1再探metasploit的攻击载荷模块 7.1.1典型的攻击载荷模块 metasploit涵盖了各大主流操作系统和平台,其中绝大部分是远程漏洞 ...
- Python 模块化 from .. import 语句资源搜索顺序 (三)
接着上一篇文章最后的import子句资源搜索顺序,我们来写几个例子了解下. 例一. #test1.py x = 123 #test.py import test1 print(dir()) print ...
- (转)查看mysql数据库连接数、并发数相关信息
查看mysql数据库连接数.并发数相关信息 1.mysql> show status like 'Threads%';+-------------------+-------+| Variabl ...
- 通过nat让内网机器上网
让内网机器访问不通机房的机器,架构如下 (172.16.10.5) ----- (172.17.9.109 可以出外网,开启路由转发) ------- (内网 192.168.36.19 能pi ...
- Strategy(策略)模式
1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Cod ...
- 【js】 ajax 与 axios 区别
ajax 与 axios区别 Ajax: Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发 ...