Clayman的专栏

It's all about XNA & GPU Programming

用户操作
[即时聊天] [发私信] [加为好友]
claymanID:soilwork
192555次访问,排名381好友0人,关注者13
soilwork的文章
原创 85 篇
翻译 15 篇
转载 0 篇
评论 330 篇
clayman的公告
嘿嘿 ^o^....
最近评论
kwlong2008:我是做网站建设的,来看看你的空间,不错,欢迎踩我的网站制作空间!
jym5596337:我也不知道我怎么就走到了你的路上来了呵呵...
太晕了,我们专业就学的C#... 那我就凑合着用它学习MDX喽,但到了2008你的这个时期,感觉形式有点尴尬,以前的人说 在中国搞软件是 前有微软,后有盗版。
现在是 前有XNA后有C++ ... MDX 学习资料太太太难找了。。太太太少了。 师兄给介绍下你学历路途中的资料目录咯。。。我好找来学习咯。。 感谢哦感谢。。
jym5596337:好象没有继续哇 ...
shapin:ATI的网站有个支持HLSL语法高亮的vs插件,可以支持其他版本,只要修改相应的那个注册表就行
flip:To linxv :
貼圖座標有用投影嗎?
文章分类
收藏
    相册
    blogs
    David Weller
    nVidia Developer blog
    Rico Mariani
    Shawn Hargreaves
    XNA Team blog
    XNA资源
    XNA Creators Club
    ZBuffer
    Ziggyware XNA Resources
    中国XNA开发网
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 《The Complete Effect and HLSL Guide》翻译连载(五) 收藏

    新一篇: 《The Complete Effect and HLSL Guide》翻译连载(六)  | 旧一篇: 开天辟地^_^

    The Complete Effect and HLSL Guide(五) 

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

    词汇约定

     

           虽然语法定义了如何把所有语言元素组合到一起,比如,如何定义函数和代码片段,但它只定义了如何把表达式和操作符以及标识符一起使用。这意味着语言的语法并没有定义文法(例如: 什么是标识符)。接下来的几段详细解释了HLSL编译器中的词汇约定。

     

    空白字符

     

    HLSL语言中,下面这些字符都被认为是空白字符:

    l         空格

    l         Tab字符

    l         换行符

    l         C风格的注解(/* */)。

    l         C++风格的注解( // )。

    l         asm代码块中,汇编风格的注解(;)。

     

    数字

     

           HLSL中的数字可以为浮点类型,也可以为整型。浮点数通常有以下呈现形式:

     

    Float:      ( fractional-constant [ exponent-part ] [ float-suffix ] |

                   (digit-sequence exponent-part [ float-suffix ] )

    Fractnal-const:      ( [digit – sequence] . digit – sequence ) | (digit – squence . )

    Sign:       + | -

    Dight – sequence:        digit | (digit – sequence digit )

    floating – suffix:    h | H | f | F

     

    整型的语法与此类似:

     

    Integer:  integer – constant [ interger – suffix ]

    Integer – constant:       digit – sequence |  ( 0 digit – sequence ) |  ( 0 × digit – sequence )

    Digit – sequence: digit |  ( digit – sequence digit )

    Integer – suffix:    u | U | l | L

     

    字符

     

           HLSL允许定义字符和字符串。字符串都是由字符组成。下面是字符的定义:

     

    l         ‘ c ‘ (字符)

    l         ‘ \t ‘ , ‘ \n ‘,…..( 转义字符 )

    l         ‘ \### ‘ (八进制换码顺序 )

    l         ‘ \x## ‘ (十六进制换码顺序)

     

     

          注意


    预处理指令中不能包含转义字符。


     

           字符串包含在一对引号中,可以包含前面所述的任意有效字符组合。

     

    标识符

     

           标识符用来表示函数名或变量名之类的语言元素。除了前面所列的关键字以外,标识符可以是字母和数字的任意组合,但必须保证第一个字符为字母。

     

    操作符

     

           HLSL定义了一组操作符,以便在表达式中使用。表1-5 列出了所有标准操作符,以及他们的含义。如果你熟悉CC++,那么这些操作符对你来说应该是一目了然的。

     

    1-5 HLSL 操作符

    操作符           描述

    ++                          一元加法。

    --                            一元减法。

    &&                         逻辑与。

    ||                             逻辑或。

    ==                          等号。

    ::                             成员标识符(用于结构和类)。

    <<                          二进制左移。

    <<=                        自赋值(self assigning)二进制左移,a<<= b等于a = a<<b

    >>                          二进制右移。

    >>=                        自赋值二进制右移,a>>=b等于a = a>>b

                               省略符(用于可变参数函数)。

    <=                          小于等于。

    >=                          大于等于。

    !=                           不等于。

    *=                          自赋值乘法, a *= b 等于 a = a * b

    /=                           自赋值除法, a /= b 等于 a = a / b

    +=                          自赋值加法, a += b 等于 a = a + b

    -=                           自赋值减法, a -= b 等于 a = a – b

    %=                         自赋值求余, a %= b 等于 a = a % b

    &=                         自赋值逻辑与, a &= b 等于a = a & b

    |=                           自赋值逻辑或, a |= b 等于 a = a | b

    ^=                           自赋值求幂, a ^= b 等于 a = a ^ b

    ->                           重定向操作符,用来访问结构成员。

     

    语言语法

     

           HLSL语言的语法相当简单。初看可能有些复杂,但只要使用它写几个程序,你马上就能掌握要领。目前为止,你不应该对语法太过担心,后面的章节我们将逐步了解语言的每个部分。由于实际的语法表相当长,我决定单独把他放到附录D中。另外你也可以参考DirectX SDK获取更多信息。

          (译注:请参考DirectX SDK中DirectX Graphics--Reference--HLSL Shader Reference--Appendix中的Language Syntax部分)

           观察表的第一行,可以看到HLSL程序被定义为一个program。每个program要么为空,要么包含一系列decl(声明)。最初的两行表示每个decls可以由多条其它decl组成。你可能已经注意到,声明可以用来定义空白语句,类型声明,变量声明,结构声明,函数声明或technique声明。语义定义了不同声明类型等等。

     

    小结以及接下来的内容

     

           在这一章里,我们简要概括了DirectXshader技术在过去几年间的发展和历史。随着shader model 2.03.0复杂度的增加,开发者不但需要利用语言的所有新能力,同时,还需要高效的完成任务。由于新着色管道的指令和通用处理器上的指令越来越类似,因此,开发一门高级语言,让开发者把注意力集中在shader所要实现的功能上,而不是把精力放在如何使用寄存器,或对某种硬件如何组合指令才能最优化之类的琐碎问题上是很有意义的。

     

           在需求的驱动下,微软开发并通过DirectX SDK发布了HLSL着色语言,帮助开发者使用最新的图形技术,创建更加真实的图形。本章,我们学习了很多语法背后的基础知识。虽然这章看起来有些枯燥,不要担心,随后的几个章节我们就会讨论一些比较有趣的内容。

     

           下一章,我们将学习HLSL语言中关于变量,表达式和数据类型的内容。继续上路吧……

     ~~~~~~~~~~~~~~~~~~~~~~~~第一章完~~~~~~~~~~~~~~~~~~~~~~~~~~

     

    发表于 @ 2006年11月29日 13:07:00|评论(loading...)|编辑

    新一篇: 《The Complete Effect and HLSL Guide》翻译连载(六)  | 旧一篇: 开天辟地^_^

    评论

    #老鬼菠萝 发表于2008-07-16 19:17:31  IP: 219.143.147.*
    继续学习
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © clayman