HLSL中mul函数的使用
一、mul函数
mul函数的作用是完成向量与矩阵的乘法运算,有如下两种形式
1、mul(v, M):行向量v乘以矩阵M
2、mul(M, v):矩阵乘以列向量v
默认情况下,矩阵是按列选取(column-major matrix picking),也就是每个寄存器存储矩阵的一列,M=(c0, c1, c2, c3);如果是按行选取(row-major matrix picking),那么每个寄存器存储的是矩阵的一行.
下面说明在默认按列选取情况下,mul的两种实现方式
1、mul(v, M)
dp4 o0.x, v0, c0
dp4 o0.y, v0, c1
dp4 o0.z, v0, c2
dp4 o0.w, v0, c3
dp4的作用是完成4维向量的点积,结果存储在o0中
2、mul(M, v)
mul r0, c1, v0.y
mad r0, c0, v0.x, r0
mad r0, c2, v0.z, r0
mad o0, c3, v0.w, r0
实现原理:o0 = c0*x + c1*y + c2*z + c3*w
其中mad完成是mul add两个操作,即mad d, a, b, c <<==>> d = a * b + c
对于在hlsl中,如果对顶点进行变换,选取用那个形式进行计算取决于矩阵的存储形式以拾取方式,具体情况如下:
1、如果用Effect::SetMatrix进行矩阵的设置,那么就用mul(v, M),因为在SetMatrix时,会进行矩阵的转置操作。或者用mul(v, transpos(M))
2、如果不用Effect::SetMatrix进行矩阵的设置,比如Ogre,那么传入shader中的矩阵就是按行存储的,故采用mul(M, v)
下面截图分别是矩阵在GPU的存储形式和CPU端的存储形式
GPU 端
CPU端
可见在没有通过Effect::SetMatrix设置时,存储表现形式是一样的。最后一列表示的是平移变换
二、矩阵构造
在HLSL中矩阵的构造如下:
float4x4 mt = float4x4(v0, v1, v2, v3);
= {v00 , v01 , v02, v03 ,
v10 , v11 , v12 , v13 ,
v20 , v21 , v22 , v13 ,
v30 , v31 , v32 , v33}
即按行序构造。
mt[0]获取的是第0行元素的值v0
HLSL中mul函数的使用相关推荐
- HLSL中mul()函数的解释
原文的地址:https://www.cnblogs.com/X-Jun/p/9808727.html 阅读目录 前言 一些线性代数基础 行主矩阵与列主矩阵 矩阵左乘与右乘 C++和HLSL中矩阵的内存 ...
- HLSL中的MUL指令深层剖析
HLSL中的MUL指令深层剖析 原作者邮箱 BoYueGame#Gmail#com 欢迎交流. 此贴可以随意转载而不用注名出处.但也别说是你写的就行. 在读此文之前,读者应该知道什么是行主,列主矩阵, ...
- TensorFlow官方文档中的sub 和mul中的函数已经在API中改名了
照着tensorflow 官方文档学习tensorflow时,出现问题: 第一,执行程序 #进入一个交互式Tensorflow会话 import tensorflow as tf sess = tf. ...
- HLSL内置函数一览
本文版权归 博客园 七星重剑 所有,如有转载,请按如下方式于显示位置标明原创作者及出处,以示尊重!! 作者:七星重剑 原文:每天30分钟看Shader--(1)HLSL固有函数 [Intrinsic ...
- HLSL内置函数,及HLSL与GLSL的对应函数
HLSL函数列表 本表来自网络,我对说明做了些修改. Name Syntax Description abs abs(x) 返回x的绝对值.对x的每个元素都会独立计算一次.Absolute value ...
- python中匿名函数的作用_Python 中的匿名函数,你会用吗
原标题:Python 中的匿名函数,你会用吗 概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则 ...
- scala 函数中嵌套函数_Scala合成函数
scala 函数中嵌套函数 Scala中的合成功能 (Composition function in Scala) Scala composition function is a way in whi ...
- scala 函数中嵌套函数_Scala函数–声明,定义,调用和嵌套函数
scala 函数中嵌套函数 A function is a set of statements combined together to perform a specific task. The co ...
- SICP2——Python中使用函数构建对象
一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...
最新文章
- LVS实现负载均衡及高可用
- 说说如何基于 Vue.js 实现表格组件
- 【转】几点 iOS 开发技巧
- 谷歌为何要大力投资生命科学初创公司?
- win10下安装tensorflow-gpu==1.11.0的详细教程
- 事务操作 mysql的事务操作
- SAP APF modeler过滤器的设计原理
- 微软ping程序源代码完整版(附详细的注释)
- 雷赛运动控制卡能不能用c语言_弱电知识之三:跟我学做全彩屏,认识LED全彩屏的模组、控制卡...
- GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2)
- linux ext4 inode,Ext4文件系统中inode数量的限制
- 笔记本超频会烧吗_CPU超频电脑会坏吗?
- 模拟量万能换算公式4-20ma
- php 电子签字,电子签名和电子签字的区别
- 看集装箱号码识别技术如何解决港口拥堵
- PDF怎么用免费软件转换成word?推荐个高性价比转换方法
- 计算机cpu的主频参数,电脑CPU的参数怎么看?原来这么简单!
- 【Git版本控制管理】Gitee(码云)和GitHub的使用
- 推荐一个windows下使用的无广告解压缩软件
- KB/S MBPS转换