分享
 
 
 

介绍顶点着色器和像素着色器

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

第一部分 顶点着色器

什么是顶点着色器?

1 顶点着色器是一组指令代码,这组指令代码在顶点被渲染时执行。

2 同一时间内,只能激活一个顶点着色器。

3 每个源顶点着色器最多拥有128条指令(DirextX8.1),而在DirectX9,则可以达到256条。

为什么大家要使用顶点着色器?

1 顶点着色器可以提高渲染场景速度。

2 用顶点着色器你可以做布类仿真,高级别动画,实时修改透视效果(比如水底效果),高级光亮(需要像素着色器支持)

顶点着色器如何运作?

简单说来,运作方式如下:当渲染一个顶点时,API会执行你在顶点着色器中所写的指令。依靠这种方法,你可以自己控制每个顶点,包括渲染,确定位置,是否显示在屏幕上。

如何创建一个顶点着色器?

用一个文本编辑器就可以了!我建议你们使用notepad或者vs开发环境来创建和修改着色器。另外,必须拥有一个支持可编程着色器的显卡。写完着色器后,保存他。API就可以调用他了(Direct3D或OpenGL)。API通过一些函数来调用这些代码指令到硬件中。

第二部分 像素着色器

什么是像素着色器?

1 像素着色器也是一组指令,这组指令在顶点中像素被渲染时执行。在每个执行时间,都会有很多像素被渲染。(像素的数目依靠屏幕的分辨率决定)

2像素着色器的指令和顶点着色器的指令非常接近。像素着色器不能像顶点着色器那样,单独存在。他们在运行的时候,必须有一个顶点着色器被激活。

为什么大家要使用像素着色器?

1 像素着色器过去是一种高级图形技术,专门用来提高渲染速度。

2 和顶点着色器一样,使用像素着色器,程序员能自定义渲染每个像素。

像素着色器如何运作?

一个像素着色器操作顶点上单独的像素。和顶点着色器一样,像素着色器源代码也是通过一些API加载到硬件的。

如何创建一个像素着色器?

也和顶点着色器一样,你只需要一个文本编辑器和支持着色器编程的显卡即可。同样,API(Direct3D OpenGL)加载像素着色器代码指令到硬件中。

第三部分 寄存器

我们需要什么样的硬件支持?

1 需要DirectX SDK 9.0(DX用户)。注意:我们的顶点着色器的版本是vs2.0。(Dx9支持)

2 需要OpenGL 1。4(OpenGL用户)。

3 可编程着色器显卡。

什么是寄存器?

寄存器是显卡GPU的内存位置,直观的说,可以把寄存器想象成变量存放的地方。现在,有相当数量的寄存器你可以使用!顶点着色器拥有比像素着色器更多的寄存器。

我们先看看可供使用的顶点着色器有哪些?

1 输入寄存器16个

2 输出寄存器9个(GeForce显卡)或11个(Radeon显卡)(译者注:请参看最新的显卡介绍,硬件更新太快,没办法。)

3 常数寄存器96个(GeForce显卡)或192个(Radeon显卡)

4 临时寄存器12个

5 地址寄存器1个(顶点着色器vc2.0)

这些寄存器都是干什么的?

1 输入寄存器保留顶点的数值,当顶点要建立渲染时。比如(D3D),输入寄存器v0将保存顶点位置,v1保存颜色。(例子代码在下一章)

2 输出寄存器保存将要被渲染的顶点,最终的值。在下面的例子中,输出寄存器oPos保存顶点的输出位置,oD0保存顶点颜色。(这些值可能会被更新)

3 常量寄存器保存你自己写入的数据。例子中,你可以写进光线颜色,那么,就可以设定寄存器c[15]。你可以混合顶点颜色数据:基于当前光照oD0,使v1附上新的颜色。

4 临时寄存器被用来保存临时变量。

5 地址寄存器保存地址偏移量(整数)。

不要对上面介绍的东西害怕。我也是第一次学习这些东西(译者:我也是-_-!)。

然后我们看看像素着色器寄存器都有些什么?

1 常量寄存器8个

2 纹理寄存器4个(ps1.4里有6个)

3 临时寄存器2个(ps1.4里有6个)

4 颜色寄存器2个

这些寄存器都是干什么的?

1 常量寄存器保存用户输入的数据

2 纹理寄存器保存对应顶点的纹理坐标

3 颜色寄存器保存像素的输出颜色

4 临时寄存器保存临时值

后面还有教程看,耐心点。

第四部分 教程(分别使用了D3D和OpenGL)

顶点着色器例子(D3D版):

// Header section…

vs.2.0 // Vertex Shader version

// Define the input information…

dcl_position v0 // Declare that v0 will be the original position

dcl_color v1 // Declare that v1 will hold the original color

// Set the output information…

mov oPos, v0 // Move the original position to the final position

mov oD0, v1 // Move the original color to the final color

每个顶点着色器都是由3部分组成:头,输入定义段,数据段。

顶点着色器例子(OpenGL using vertex shader extension GL_ARB_vertex_program)

// Header section…

!!ARBvp1.0 // Vertex Shader version

// Declare that VPos will be the original position and VCol is the original color

ATTRIB VPos = vertex.position;

ATTRIB VCol = vertex.color;

// Declare that OutPos is the output position and OutColor is the output color

OUTPUT OutPos = result.position;

OUTPUT OutColor = result.color;

// Set the output information…

mov OutPos, VPos // Move the original position to the final position

mov OutColor, VCol // Move the original color to the final color

顶点着色器包括4部分:头,输入定义段,输出定义段,数据段。

像素着色器(Direct3D using pixel shader ps.1.1)

ps.1.1 // version number.

mov r0, v0 // Move the original pixel color to the output color so we can use that.

此着色器使用原始颜色数据输出。

像素着色器(OpenGL using pixel shader extension GL_ARB_fragment_program)

!!ARBfp1.0

ATTRIB inColor = fragment.color.primary; # Original pixel color.

OUTPUT outColor = result.color; # Define output color.

MOV outColor, inColor; # Move original color to the output so we can use that.

END # Define end of the pixel shader.

此着色器使用原始颜色数据输出。

第五部分 结论

使用顶点和像素着色器会极大的改善图形质量。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有