一、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函数的使用相关推荐

  1. HLSL中mul()函数的解释

    原文的地址:https://www.cnblogs.com/X-Jun/p/9808727.html 阅读目录 前言 一些线性代数基础 行主矩阵与列主矩阵 矩阵左乘与右乘 C++和HLSL中矩阵的内存 ...

  2. HLSL中的MUL指令深层剖析

    HLSL中的MUL指令深层剖析 原作者邮箱 BoYueGame#Gmail#com 欢迎交流. 此贴可以随意转载而不用注名出处.但也别说是你写的就行. 在读此文之前,读者应该知道什么是行主,列主矩阵, ...

  3. TensorFlow官方文档中的sub 和mul中的函数已经在API中改名了

    照着tensorflow 官方文档学习tensorflow时,出现问题: 第一,执行程序 #进入一个交互式Tensorflow会话 import tensorflow as tf sess = tf. ...

  4. HLSL内置函数一览

    本文版权归 博客园 七星重剑 所有,如有转载,请按如下方式于显示位置标明原创作者及出处,以示尊重!! 作者:七星重剑 原文:每天30分钟看Shader--(1)HLSL固有函数 [Intrinsic ...

  5. HLSL内置函数,及HLSL与GLSL的对应函数

    HLSL函数列表 本表来自网络,我对说明做了些修改. Name Syntax Description abs abs(x) 返回x的绝对值.对x的每个元素都会独立计算一次.Absolute value ...

  6. python中匿名函数的作用_Python 中的匿名函数,你会用吗

    原标题:Python 中的匿名函数,你会用吗 概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则 ...

  7. scala 函数中嵌套函数_Scala合成函数

    scala 函数中嵌套函数 Scala中的合成功能 (Composition function in Scala) Scala composition function is a way in whi ...

  8. scala 函数中嵌套函数_Scala函数–声明,定义,调用和嵌套函数

    scala 函数中嵌套函数 A function is a set of statements combined together to perform a specific task. The co ...

  9. SICP2——Python中使用函数构建对象

    一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...

最新文章

  1. LVS实现负载均衡及高可用
  2. 说说如何基于 Vue.js 实现表格组件
  3. 【转】几点 iOS 开发技巧
  4. 谷歌为何要大力投资生命科学初创公司?
  5. win10下安装tensorflow-gpu==1.11.0的详细教程
  6. 事务操作 mysql的事务操作
  7. SAP APF modeler过滤器的设计原理
  8. 微软ping程序源代码完整版(附详细的注释)
  9. 雷赛运动控制卡能不能用c语言_弱电知识之三:跟我学做全彩屏,认识LED全彩屏的模组、控制卡...
  10. GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2)
  11. linux ext4 inode,Ext4文件系统中inode数量的限制
  12. 笔记本超频会烧吗_CPU超频电脑会坏吗?
  13. 模拟量万能换算公式4-20ma
  14. php 电子签字,电子签名和电子签字的区别
  15. 看集装箱号码识别技术如何解决港口拥堵
  16. PDF怎么用免费软件转换成word?推荐个高性价比转换方法
  17. 计算机cpu的主频参数,电脑CPU的参数怎么看?原来这么简单!
  18. 【Git版本控制管理】Gitee(码云)和GitHub的使用
  19. 推荐一个windows下使用的无广告解压缩软件
  20. KB/S MBPS转换

热门文章

  1. 火狐浏览器一败涂地?
  2. windows安全防御
  3. 没有一个节点叫失败(转自他人)
  4. Flyerinternational外汇对黄金、白银、原油策略分析信息被多家公司“借用”
  5. 达人篇:1)简单易懂的质量管理-写在达人篇开篇
  6. 发论文前如何根据模板快速修改论文格式
  7. 计算机的ip地址 dns地址,如何正确设置计算机的IP地址和DNS
  8. ios沙箱软件_iOS app ipa 与 沙盒
  9. 企业外贸网站制作的要求及注意事项
  10. 记一次客户端查询DNS服务器被拒绝原因查找