网页功能: 加入收藏 设为首页 网站搜索  
[原]翻译Shaders.for.Game.Programmers第四章(1)
发表日期:2007-03-28作者:[转贴] 出处:  
 


[原]翻译Shaders.for.Game.Programmers第四章(1)


[原]翻译Shaders.for.Game.Programmers第四章(1)

入 门
你的第一个着色器
第四章
现在你已经对3D图形的原理、着色器的重要性,以及RenderMonkey是怎样工作的有了基本的了解。现在是你开始着手写你的第一个着色器的时候了。我们将从一些基本着色器开始,在你开始探究真的算法和方法以前,那将帮你了解每件事物是怎样共同起作用的。
在这一章,你就要创建三个单简单的着色器,来完成一些简单的任务,比如显示一个对象并且贴上纹理。 完成好的着色器和他们所用到的数据都在CD - ROM中,而且可以把你的结果跟我的做个比较。. 在这章结尾的习题将是你在这里开发的着色器的一个扩展。
你的第一个着色器
你的第一着色器将尽可能的简单。你将绘制一个小没有纹理和恒定颜色的茶壶。然后你将把纹理和更多的颜色加到你的茶壶上。在开始之前,得在你得电脑上准备好RenderMonkey。注:这个着色器所需的全部要用的资源都可以在光盘上这一的源代码目录下找到。.
你所需要的第一件事是创建一个Effect Group 译者注 )包含你的着色器。创建一个效果群的方法是:右击工作区根节点并选择添加: Effect Group w/DirectX Effect 。在你的预演窗你将看到某些东西已经被渲染了。这是因为RenderMonkey装了这种同示例效果一样的New Effect Group,如图表4.1所示。因为你想在这一章从头开始做每件事物,你必须删除在Effect Group下的其他节点,除了这个效果节。为了达到这个目的,选择你想要删除的结结点并按下Delete键。另外一种可行的方法就是通过右击菜单选择添加 Effect Group :Empty Effect Group。
你可能也想要用某种有意义的名字来重命名这个Effect Group,比如说MyEffect,右击这个Effect Group的结点并选择重命名。如果从一个效果中删除结点是看到错误信息时,你不用担心。这是 RenderMonkey采取的方式,让你认识到某些能够渲染着色器的项目正在丢失。这个错误信息现在是可以被忽略的,因为你将要添加这些元件。
注解:RenderMonkey是你能够在创建一个新的Effect Group或结点时用默认的效果数据。这为稍后的工作节约了大量的时间。
在这一章,我们将从头开始创建每件事物,因为你想知道每件事物是怎样被建立起来的。为了使任意的事物显示到屏幕上去,你都毫无疑问需要一些几何图形用来渲染。所以在这一点上,你将需要为你的着色器添加一个新模型。右击你刚刚添加的效果结点,并选择上下文菜单中显示的Add Model这一选项。一个新模型结点就创建好了。你现在可以通过右击菜单重命名这个结点为MyModel,双击模型结点并选择proper geometry file。这样就激出 Open Model menu,如Figure 4.2所示。浏览到这一章的源代码目录,选择 teapot.3ds文件,并单击Open按钮。
在你准备好你的几何图形的同时,你需要告诉RenderMonkey这个几何图形的信息是怎样发送给顶点着色器(vertex shader)的。用一个流映射结点(Stream Mapping node:译者注)来做到这点。这个结点包含为翻译你的模型中信息到某种你的着色器可以使用的信息所必需的是设置。 

Figure 4.1 Default Effect Group created by RenderMonkey.


Figure 4.2 Selecting the model file for your shader.


特别地,这个结点将用你的vertex shader把几何图形的信息映射到具体的输入寄存器。为了达到这个目的,右击该效果结点并选择 Add Stream Mapping选项。如图表4.3中的例子,双击该新建的流映射结点将激出流映射编辑器。最初,这个编辑器只包含位置信息,但是单击Add 按钮将允许你增加更多流信息,比如法线和纹理坐标,对于这个shader来说这些都已经足够了。你已经完成了流映射的设定,这样你现在应该关闭编辑器窗口。



Figure 4.3 Setting up the stream mapping for your teapot
model.
因为你的着色器将要是很基础的,因此你将只须添加单一变量,视图-射影矩阵(the view - projection matrix)。虽然这个是一由RenderMonkey提供的机内的变量,但是在它可被用于一个着色器之前,它仍必须添加到工作区。
右击你的效果结点并选择Add Variable:Matrix∶Predefined :
view_proj_matrix,从该菜单中。这就创建了一个将被RenderMonkey的combined model / view / projection matrix自动设定的矩阵,这个矩阵用于显示你的对象,把引入的顶点从物体空间转变为屏幕空间。
此时,你就有了你的效果中需要的元素,只剩下渲染这个效果本身了。
为了添加一个新的rendering pass,右击该效果结点并选择Add Pass选项。
这就创建了一个包含示例效果的effect pass。你现在可以重命名你的rendering pass为My Pass并且删除该效果的内容,这样就可以从头开始创建它。
你的rendering pass最先需要的两个元素是一个模型的一个引用和流映射。在你的效果中,虽然你可以在任一点添加模型或将流映射,但是仍然需要告诉RenderMonkey模型或流映射是用于哪些特定的流通的。为模型设立一个引用,只用右击你的Pass结点并选择 Add Model Reference。
这就创建了一个模型引用的句柄,但是它仍然需要指向正确的模型。
要选择实际模式引用(actual model reference 译者注),右击你新建的引用结点并选择Reference Node选项,如图表4.4.所示。这可以激出一个可选的模型单,你可以从那里选择MyModel。对于流映射引用,只用简单地重复同一个处理:从流通结点的右击菜单中选择 Add Stream Mapping Reference。


Figure 4.4 Setting up a model reference
for your rendering pass.

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 [原]翻译Shaders.for.Game.Programmers第四章(1)
本类热点文章
  DDraw和D3D立即模式编程手册
  矩阵求逆的快速算法
  本地化支持:OGRE+CEGUI中文输入:OGRE方..
  Direct3D中实现图元的鼠标拾取
  3D场景中的圆形天空顶
  OpenGL显卡编程
  一种高效的基于大规模地形场景的OCCLUS..
  一个完善的读取3DS文件例子
  如何制作一个可控制的人体骨骼模型
  Direct3D 入门之我见
  Slope(斜坡) 法线生成算法,在地形渲染..
  在Direct3D中渲染文字
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00553