- 15
- 0
- 约9.98万字
- 约 139页
- 2018-06-09 发布于河南
- 举报
XNA Shader编程教程
XNA Shader编程教程1-环境光照
Shader简史
在DirectX8之前,GPU使用固定方式变换像素和顶点,即所谓的“固定管道”。这使得开发者不可能改变像素和顶点转化和处理的进程,使大多数游戏的图像表现看起来非常相似。
DirectX8提出了顶点和像素着色器,这让开发者可以在管道中决定如何处理顶点和像素,使他们获得了很强的灵活性。
一开始shader编程使用汇编语言程序使用的着色器,这对shader开发者来说相当困难,Shader Model 1.0是唯一支持的版本。但DirectX9发布后这一切改变了,开发者能够使用高级着色语言(HLSL)取代了汇编语言,HLSL语法类似C语言,这使shader更容易编写,阅读和学习。
DirectX 10.0提出了一个新的shader——Geometry Shader作为Shader Model 4.0的组成部分。但这需要一个最先进的显卡和Windows Vista才能支持。
XNA支持Shader Model 1.0至3.0,可以在XP,Vista和XBox360!上运行。
Shader?
嗯,历史已经说得够多了……那么什么是shader?
正如我所说的,shader可以用来定制管道的步骤,使开发者能够决定如何处理像素/顶点。
如下图所示,应用程序在渲染时启动并使用shader,顶点缓冲区通过向pixel shader发送所需的顶点数据与pixel shader协同工作,并在帧缓冲中创建了一个图像。
但请注意许多GPU不支持所有的shader模式,在开发shader时应引起足够重视。一个shader最好要有一个类似/简单的效果,使程序在较旧的计算机上也能工作正常。
Vertex shader
Vertex shaders用来逐顶点地处理顶点数据。例如可以通过将模型中的每个顶点沿着法线方向移动到一个新位置使一个模型变“胖”(这称之为deform shaders)。
Vertex shaders从应用程序代码中定义的一个顶点结构获取数据,并从顶点缓冲区加载这个结构传递到shader。这个结构描述了每个顶点的属性:位置,颜色,法线,切线等。
接着Vertex shader将输出传递到pixel shader。可以通过在shader中定义一个结构包含你想要存储的数据,并让Vertex shader返回这个实例来决定传递什么数据,或通过在shader中定义参数,使用out关键字来实现。输出可以是位置,雾化,颜色,纹理坐标,切线,光线位置等。
struct VS_OUTPUT
{
float4 Pos: POSITION;
};
VS_OUTPUT VS( float4 Pos: POSITION )
{
VS_OUTPUT Out = (VS_OUTPUT) 0;
...
return Out;
}
// or
float3 VS(out float2 tex : TEXCOORD0) : POSITION
{
tex = float2(1.0, 1.0);
return float3(0.0, 1.0, 0.0);
}
Pixel Shader
Pixel Shader对给定的模型/对象/一组顶点处理所有像素(逐像素)。这可能是一个金属盒,我们要自定义照明的算法,色彩等等。Pixel Shader从vertex shaders的输出值获取数据,包括位置,法线和纹理坐标:
float4 PS(float vPos : VPOS, float2 tex : TEXCOORD0) : COLOR
{
...
return
float4(1.0f, 0.3f, 0.7f, 1.0f);
}
pixel shader可以有两个输出值:颜色和深度。
HLSL
HLSL是用来开发shader的。在HLSL中,您可以声明变量,函数,数据类型,测试(if/else/for/do/while+)以及更多功能以建立一个顶点和像素的处理逻辑。下面是一些HLSL的关键字。这不是全部,但是最重要的。
数据类型:
bool true or false
int 32-bit integer
half 16bit integer
float 32bit float
double 64bit double
向量:
float3 vectorTest
float vectorTest[3]
vector vectorTest
float2 vectorTest
bool3 vectorTest
矩阵:
float3x3: 3x3矩阵,float类型
float2x2: 2x2矩阵, floa
您可能关注的文档
- 作业指导书(新).doc
- C++课程设计源码.doc
- 物流工程专业本科人才培养方案.doc
- 物流工程(二十一世纪普通高等院校实用规划教材·物流系列).doc
- 直销银行:银行迈向互联网金融模式全解析(必看).doc
- 物联网面临的问题和挑战.doc
- 科学家发现细胞进化缺失环节.doc
- 二年级下册语文教案 鲁教版.doc
- 2014年山东省商品贸易专业春季高考试题.doc
- 市场营销讲义和教案.doc
- 2026年全球AI教育市场自适应学习系统与教育大数据分析.docx
- 2026年全球AI教育市场数据驱动决策分析.docx
- 2026年全球AI法律合规性检查技术路线图.docx
- 2026年全球AI法律咨询市场发展机遇与挑战.docx
- 2026年全球AI法律咨询市场合同审查自动化技术政府支持政策.docx
- 智慧农业无人机作物生长监测与病虫害防治信息化平台可行性分析报告.docx
- 2025年生态旅游景区停车场新能源汽车停车需求预测报告.docx
- 2026年全球AI法律咨询市场竞争格局分析.docx
- 2026年全球AI教育市场教师技术应用案例.docx
- 2026年全球AI教育市场教师角色转型与教育创新激励机制研究.docx
最近下载
- (高清版)B-T 6739-2022 色漆和清漆 铅笔法测定漆膜硬度.pdf VIP
- 康玉明-如何撰写国家自然科学基金申课件.ppt VIP
- 在带头固本培元、增强党性等“五个带头”对照检查发言材料2篇范文2026年.docx VIP
- 2025《医疗器械经营质量管理规范》培训课件.docx VIP
- 农产品质量安全检测知识竞赛考试题库资料500题(供参考).pdf VIP
- 卓梅尼GTEC188 电梯控制系统调试手册v1.4.pdf
- 汽轮机热力性能试验的技术应用.ppt
- 心理痛苦评估表、焦虑、抑郁自评量表、预期性悲伤量表、社会支持评定量表、患者尊严量表.pdf VIP
- 心律失常专题宣讲.ppt VIP
- 网红直播对消费者购买决策行为影响因素研究.docx
原创力文档

文档评论(0)