The Complete Effect and HLSL Guide_7(转载)

转载 2007年10月12日 11:50:00
转自 http://blog.csdn.net/soilwork/archive/2006/12/09/1436245.aspx
The Complete Effect and HLSL Guide(七) 
分量访问和重组
 
       如前所述,可以像访问结构成员一样来访问矢量和矩阵中的单个分量。这里对矢量和矩阵的访问方式做个小结。
 
       _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;
 
       注意,所有下标都必须来自于同一下标集,(比如xyzwrgba,或者_11_44),不同下标集之间的元素不能进行混合,比如不能出现xyrg这样的组合。同一个分量可以出现多次。但对赋值目标来说,则不允许分量重复出现。
 
注意
并不是所有硬件都支持所有类型的重组操作。对像素着色器1.x的某些版本来说,部分重组操作是不允许的。编译器可以通过模拟来补偿这些限制,但将带来一定性能损失。
 
对象类型
 
       HLSL还定义了一系列范围广泛的对象数据类型。这些类型通常用来呈现非数字数据与复合类型的句柄,典型的例子就是纹理和结构体。以下是HLSL中所定义的对象类型:
 
l         采样器
l         纹理
l         结构体
l         顶点和像素着色器
l         字符串
 
       结构的内容将在下一节关于自定义类型的部分详细讨论。
 
       字符串指使用ASCII码定义的字符串,它们除了用作注解以外,用处不是太多,这里也不对它进行详细讨论。采样器,着色器和纹理才是我们所关心的重点部分。
 
采样器和纹理
 
       HLSL定义了两种数据类型用于在shader中获取纹理信息。纹理本质上就是一个指向硬盘上一系列物理像素信息的句柄。采样器则是一组纹理采样参数的组合,比如warp mode或者mipmap属性等。
 
顶点和像素着色器
 
       HLSL定义了两种数据类型用来保存顶点和像素着色器,它们分别是vertexshaderpixelshader。如果使用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值表示0true表示1。同样,当把整型或浮点类型转换为布尔值时,0表示false。当把浮点类型转换为整型时,将四舍五入为最接近的整数。
标量——矢量               这类转换总是有效的。转换将把标量复制并填充到矢量中。
标量——矩阵               这类转换总是有效的。转换将把标量复制并填充到矩阵中。
标量——对象               这类转换是是无效的。
标量——结构               这类转换仅当结构中的成员都为数字时才是有效的。转换将把标量复制并填充到结构中。
矢量——标量               这类转换总是有效的。转换将复制矢量中的第一个分量,并填充到标量中。
矢量——矢量               目标矢量容量不大于源矢量时才是有效的。转换只保留最左边(left-most)的分量,截去剩下的分量。
矢量——矩阵               只有当矢量和矩阵一样大时,转换才是有效的。
矢量——对象               这类转换总是无效的。
矢量——结构               这类转换只有当结构容量不大于矢量,且所有成员都为数字时才是有效的。
矩阵——标量               这类转换总是有效的。转换将把矩阵左上角的值填充到标量中。
矩阵——矢量               只有当矢量和矩阵一样大时转换才是有效的。
矩阵——矩阵               只有当目标矩阵维度不大于源矩阵时,转换才是有效的。转换将把源矩阵填充到目标矩阵的左上部分,并且丢弃余下数据。
矩阵——对象               这类转换总是无效的。
矩阵——结构               只有当结构容量和矩阵一样大,且所有成员都为数字时,转换才是有效的。
对象——标量               这类转换总是无效的。
对象——矢量               这类转换总是无效的。
对象——矩阵               这类转换总是无效的。
对象——对象               只有当两个对象都是同一类型时,转换才是有效的。
对象——结构               只有当结构包含一个以上的成员时,转换才是有效的。结构中成员的类型必须和对象的类型一样。
结构——标量               只有当结构包含一个以上的成员时,转换才是有效的。这个成员必须为数字。
结构——矢量               只有当结构容量不小于矢量时,转换才是有效的。它的第一个成员必须为数字,并且等于矢量的大小。
结构——矩阵               只有当结构容量不小于矩阵时,转换才是有效的。它的第一个成员必须是数字,并且等于矩阵大小。
结构——结构               只有当目标结构容量不大于源结构容量时,转换才是有效的。目标结构和源结构间各自成员的转换也必须是有效的。
 
~~~~~~~~~~~~~~~~~未完待续~~~~~~~~~~~~~~~~~

HLSL效果框架实例之高斯模糊

实例目的 // 1.提高了一个完整的fx框架编写Shader,解决掉了编写过程中遇到的所有问题。验证了在FX框架可以不用GetParameterByName获取句柄的,直接用字符串作为句柄即可。 //...
  • Blues1021
  • Blues1021
  • 2015年07月31日 23:22
  • 2785

Tomcat 启动异常深度剖析

最近在使用tomcat 部署应用是遇到异常如下: Caused by: java.lang.IllegalStateException: Unable to complete the sc...
  • chndata
  • chndata
  • 2015年08月24日 10:53
  • 3957

DirectX11 高级着色器语言HLSL入门

高级着色器语言HLSL初步学习1. 数据类型简介 与CPU不同,在显卡芯片中,最小的数据吞吐单元是一个由32位浮点数组成的四元组。这一点很有道理不是,想想你在渲染过程中所有涉及到的数据,最复杂的不...
  • sinat_24229853
  • sinat_24229853
  • 2015年09月24日 18:46
  • 2863

Complete CompTIA A+ Guide to IT Hardware and Software(7th) epub

  • 2017年09月27日 23:16
  • 90.18MB
  • 下载

用Python和OpenCV创建一个图片搜索引擎的完整指南 The complete guide to building an image search engine with Python and

Let’s face it. Trying to search for images based on text and tags sucks. Whether you are tagging ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年01月22日 11:15
  • 2727

CWTS, CWS, and CWT Complete Study Guide Exams PW0-071, CWS-2017, 无水印原版pdf

  • 2017年12月29日 00:24
  • 43.74MB
  • 下载

McGraw-Hill,.The Six Sigma Handbook - The Complete Guide for Greenbelts, Blackbelts, and Managers at All Levels, 2nd Edition.[2003.ISBN0071410155].pdf

  • 2009年04月17日 21:14
  • 12.99MB
  • 下载

.NET and COM The Complete Interoperability Guide

  • 2008年06月19日 08:23
  • 8.23MB
  • 下载

CCNA Routing and Switching Complete Study Guide Exam 200-125(2nd) 无水印原版pdf

  • 2017年12月16日 21:51
  • 28.65MB
  • 下载

CWTS, CWS, and CWT Complete Study Guide Exams PW0-071, CWS-2017, CWT-2017 epub

  • 2017年12月16日 11:50
  • 12.62MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:The Complete Effect and HLSL Guide_7(转载)
举报原因:
原因补充:

(最多只允许输入30个字)