《The Complete Effect and HLSL Guide》翻译连载(七)

《The Complete Effect and HLSL Guide》翻译连载(一)                    哦~~~~。好久没有更新了,决定把近期写的一点东西贴上来。工作了三个月之后终于辞职了,找个理想的工作怎么就那么难呢??       我的demo进展缓慢,数学、数学、数学,天啊,总是在细节出错!!!       怀念昆明温暖的天气,呼呼 ^o^ The Complete Effect and HLSL Guide--Sebastien St-Lau 阅读详情

The Complete Effect and HLSL Guide(七) 

本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
翻译:clayman
Blog:
http://blog.youkuaiyun.com/soilwork
clayman_joe@yahoo.com.cn

 

分量访问和重组

 

       如前所述,可以像访问结构成员一样来访问矢量和矩阵中的单个分量。这里对矢量和矩阵的访问方式做个小结。

 

       _11, x, r                _12, y, g                _13, z, b                _14, w, a

       _21                       _22                       _23                       _24

       _31                       _32                       _33                       _34

       _41                       _42                       _43                       _44

 

       此外,通过把二到四个分量名串连到一起作为下标来使用,还可以让矢量只包含某几个指定分量,HLSL把这门技术称为重组。这里就是一些有效的重组实例:

 

       bgr, yyzw,   _12_22_32_42

 

       对矩阵来说也是如此。

 

       tempMatrix._m00_11 = worldMatrix._m00_m11;

       tempmatrix._11_22_33 = worldMatrix._24_23_22;

       temp = fMatrix._m00_m11;

       temp = fMatrix._11_22;

 

       注意,所有下标都必须来自于同一下标集,(比如xyzw,rgba,或者_11到_44),不同下标集之间的元素不能进行混合,比如不能出现xyrg这样的组合。同一个分量可以出现多次。但对赋值目标来说,则不允许分量重复出现。

 

注意


并不是所有硬件都支持所有类型的重组操作。对像素着色器1.x的某些版本来说,部分重组操作是不允许的。编译器可以通过模拟来补偿这些限制,但将带来一定性能损失。

 

对象类型

 

       HLSL还定义了一系列范围广泛的对象数据类型。这些类型通常用来呈现非数字数据与复合类型的句柄,典型的例子就是纹理和结构体。以下是HLSL中所定义的对象类型:

 

l         采样器

l         纹理

l         结构体

l         顶点和像素着色器

l         字符串

 

       结构的内容将在下一节关于自定义类型的部分详细讨论。

 

       字符串指使用ASCII码定义的字符串,它们除了用作注解以外,用处不是太多,这里也不对它进行详细讨论。采样器,着色器和纹理才是我们所关心的重点部分。

 

采样器和纹理

 

       HLSL定义了两种数据类型用于在shader中获取纹理信息。纹理本质上就是一个指向硬盘上一系列物理像素信息的句柄。采样器则是一组纹理采样参数的组合,比如warp mode或者mipmap属性等。

 

顶点和像素着色器

 

       HLSL定义了两种数据类型用来保存顶点和像素着色器,它们分别是vertexshader和pixelshader。如果使用asm关键字以汇编方式来编写着色程序,则可以把这些程序直接分配给着色器:

 

vertexshader vs =

{

     vs_2_0

      decl_position v0

      mov oPos, v0

};

 

       如果使用HLSL,那么则必须通过函数来定义着色器。下面就是使用高级指令定义像素着色器的例子:

 

       pixelshader ps = compile ps_2_0 psmain();

 

结构及自定义类型

 

       除了前面看到的大量预定义数据类型以外,HLSL也允许开发者创建新类型。自定义类型通常都是结构,它们是由一组其他(内置或自定义)数据类型,或基于现有类型声明的新类型,组成的对象。

 

       使用关键字struct来定义结构。结构是复合类型,用来把多个数据组合为一个整体。用下面的语法来定义结构:

 

       struct [ ID ] { members }

 

       这里是创建结构的一个例子:

 

struct Circle

{

        float4 Position;

        float Radius;

};

 

       另外,HLSL还允许使用typedef关键字,为现有类型声明一个新名称。它的语法如下:

 

       typedef  [ const ]  type  id  [ array_suffix ]  [ , id…];

 

       数组后缀可以跟随在ID之后,允许把数组作为新类型。当声明了一个类型之后,就可以通过ID来对它进行引用。注意array_suffix由一个或多个literal_integer_expression组成,用来表示数组维度。

类型转换

 

       在程序设计中,术语类型转换表示把一种数据转变为另一种数据的能力。HLSL支持多种内置类型间的转换。表2-4总结了内置数据间可能的转换。

 

表 2 -4 HLSL中的类型转换

转换类型            描述

标量——标量               这类转换总是有效的。当把布尔值转换为整型或浮点类型时,false值表示0,true表示1。同样,当把整型或浮点类型转换为布尔值时,0表示false。当把浮点类型转换为整型时,将四舍五入为最接近的整数。

标量——矢量               这类转换总是有效的。转换将把标量复制并填充到矢量中。

标量——矩阵               这类转换总是有效的。转换将把标量复制并填充到矩阵中。

标量——对象               这类转换是是无效的。

标量——结构               这类转换仅当结构中的成员都为数字时才是有效的。转换将把标量复制并填充到结构中。

矢量——标量               这类转换总是有效的。转换将复制矢量中的第一个分量,并填充到标量中。

矢量——矢量               目标矢量容量不大于源矢量时才是有效的。转换只保留最左边(left-most)的分量,截去剩下的分量。

矢量——矩阵               只有当矢量和矩阵一样大时,转换才是有效的。

矢量——对象               这类转换总是无效的。

矢量——结构               这类转换只有当结构容量不大于矢量,且所有成员都为数字时才是有效的。

矩阵——标量               这类转换总是有效的。转换将把矩阵左上角的值填充到标量中。

矩阵——矢量               只有当矢量和矩阵一样大时转换才是有效的。

矩阵——矩阵               只有当目标矩阵维度不大于源矩阵时,转换才是有效的。转换将把源矩阵填充到目标矩阵的左上部分,并且丢弃余下数据。

矩阵——对象               这类转换总是无效的。

矩阵——结构               只有当结构容量和矩阵一样大,且所有成员都为数字时,转换才是有效的。

对象——标量               这类转换总是无效的。

对象——矢量               这类转换总是无效的。

对象——矩阵               这类转换总是无效的。

对象——对象               只有当两个对象都是同一类型时,转换才是有效的。

对象——结构               只有当结构包含一个以上的成员时,转换才是有效的。结构中成员的类型必须和对象的类型一样。

结构——标量               只有当结构包含一个以上的成员时,转换才是有效的。这个成员必须为数字。

结构——矢量               只有当结构容量不小于矢量时,转换才是有效的。它的第一个成员必须为数字,并且等于矢量的大小。

结构——矩阵               只有当结构容量不小于矩阵时,转换才是有效的。它的第一个成员必须是数字,并且等于矩阵大小。

结构——结构               只有当目标结构容量不大于源结构容量时,转换才是有效的。目标结构和源结构间各自成员的转换也必须是有效的。

 

~~~~~~~~~~~~~~~~~未完待续~~~~~~~~~~~~~~~~~

 

《The Complete Effect and HLSL Guide》翻译连载(十一)  The Complete Effect and HLSL Guide(十一) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  第四章 Shader示 阅读详情

相关推荐

《The Complete Effect and HLSL Guide》翻译连载(二)

The Complete Effect and HLSL Guide(二)本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 一点点历史….  

Clayman的专栏 1万+

《The Complete Effect and HLSL Guide》翻译连载(六)

The Complete Effect and HLSL Guide(六) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  第二章 HLSL着色语

Clayman的专栏 8863

The Complete Effect and HLSL Guide

不是英文的原版,我花了几周的时间都没有找到,只是中文的前三章。 绝不是有意而为,上传的太多东西,有点糊涂了。 整理的时间和上传的时间间隔有些远,记不太清楚的缘故。 不好意思。

《The Complete Effect and HLSL Guide》翻译连载(八)

The Complete Effect and HLSL Guide(八) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn定义变量 

Clayman的专栏 8456

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9210

多智能体强化学习论文——SEAC(NIPS 2020)

存在的问题&研究动机&研究思路 在稀疏奖励的环境下,多智能体的exploration存在效率不足等问题。 在IAC的基础上尝试加入重要性采样,使得每次更新智能体iii的参数时,不再仅仅使用智能体iii的数据,而是使用所有智能体的数据进行智能体iii数据的更新。 对于原始的IAC算法是on-policy的,而SEAC则是off-poligy的。 创新点 在每个智能体iii的actoriactor_iactori​和criticicritic_icritici​的更新过程中,都加入了重要性

我的AI笔记 1207

《The Complete Effect and HLSL Guide》翻译连载(十二)

The Complete Effect and HLSL Guide(十二)  本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn     我们已经有了

Clayman的专栏 6066

Halcon实战:5分钟搞定工业零件中的圆孔检测(附完整代码)

本文详细解析了如何利用Halcon的hough_circle算法在5分钟内高效完成工业零件中的圆孔检测。通过优化图像采集、智能预处理和参数化边缘检测,解决了金属反光、油污干扰等工业场景常见问题,并提供了完整的代码示例和实战案例,显著提升检测精度和效率。

weixin_29061997的博客 239

《The Complete Effect and HLSL Guide》翻译连载(五)

The Complete Effect and HLSL Guide(五) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn词汇约定       

Clayman的专栏 5687

SecureCRT多种配色方案配置文件

位置 C:\Users%USERNAME%\AppData\Roaming\VanDyke\Config\Global.ini S:"SecureCRT Tab State"=1,1,1,0,0 S:"SecureFX Local Tab State"=1,-1,200 D:"Max Chat Window History"=000000c8 D:"Active Window Alpha Transparency"=000000f0 D:"Save Keymaps As Unicode"=00000000

神棍之路 3711

IC芯片验证 - 手把手教你搭建UVM验证环境

这是一个UVM的demo项目

howard789的博客 3万+

《The Complete Effect and HLSL Guide》翻译连载(九)

The Complete Effect and HLSL Guide(九) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  第三章 函数,

Clayman的专栏 6267

Qt C++ + Qt 3D 的数字孪生工厂

以下是一个基于 **Qt C++ + Qt 3D** 的数字孪生工厂完整源码示例,集成了 **Qt 3D** 产线建模和 **WebSocket** 实时数据交互。ui->qualifiedProductsLabel->setText(QString("合格产品: %1").arg(data.qualifiedProducts));ui->totalProductsLabel->setText(QString("总产量: %1").arg(data.totalProducts));

寒寒豆豆软件公司的博客 149

《The Complete Effect and HLSL Guide》翻译连载(三)

The Complete Effect and HLSL Guide(三)本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn   

Clayman的专栏 1万+

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1272

MIKE 21 教程 2.2 Domain, Time, Module Selection设置教学

上一节讲解了水动力模型的基本概念与文件创建MIKE 21 教程 2.1水动力模型介绍​本节讲解水动力模型前三个模块的设置此模块需导入之前绘制好的网格文件,导入后可预览网格文件点击上方的Domain Specification可查看网格的数据统计与高程属性,快速检查网格文件有无明显错误 点击上方的Boundary names,可查看之前定义的出入水边界。在网格文件中,我们对边界只能以数字属性进行区分,这里可以对数字属性进行命名,在name中直接修改即可。本实例中我们的2代表入水边界,3代表出水边界。因为博主日

Hello Word 3867

《The Complete Effect and HLSL Guide》翻译连载(十)

 The Complete Effect and HLSL Guide(十) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 自定义函数  

Clayman的专栏 5081

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

《The Complete Effect and HLSL Guide》翻译连载(四)

The Complete Effect and HLSL Guide(四) 本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn~~~~~~~~~~~

Clayman的专栏 8467

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Flex中Image控件设置complete效果

以下的例子展示如何通过使用Mxml,css或者CS设置completeEffect属性来为Image控件增加一个complete效果。 layout="vertical" verticalAlign="middle" backgroundColor="white">

meteorWJ's Home—Floating clound 2758

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HLSL中采样器关联纹理的方法

HLSL中的采样器实际上一个结构类型,PixelShader程序使用采样器指定被采样纹理、纹理过滤方式和纹理寻址模式,采样器的使用语法大致如下:  texture tex0;   // 声明一个纹理对象  sampler2D s_2D = sampler_state  // 声明一个采样器对象  {      Texture = ;         // 指定被采样的纹理      Mi

linuxheik的专栏 4475

搬家了,新地址http://www.cnblogs.com/clayman/

   终于决定搬家,难用都还可以勉强忍受,可是最近居然开始乱封blog了,怕怕。可惜那么多文章带不走,手动把部份我觉得比较有价值的文章搬过去了。呵呵,欢迎大家有空过去看看:)。 此blog将不再更新...........

Clayman的专栏 18万+

Effect & HLSL Guide – Semantics(十三)

Effect & HLSL Guide – Semantics(十三) 本文版权归我所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,欢迎大家和我交流。作者:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn           介绍HLSL或者DirectX / X

Clayman的专栏 6296
上一篇: 《The Complete Effect and HLSL Guide》翻译连载(六)
下一篇: 《The Complete Effect and HLSL Guide》翻译连载(八)
soilwork
博客等级 码龄23年 290粉丝 116原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值