DirectX9 着色器学习(二)

DirectX9 中的着色器包括:Vertex shader 和 Pixel shader。首先学习顶点着色器VS,它替换了固定功能管线中的变换(Transformation)和光照(Lighting)阶段。

顶点声明:

1.  通过 D3DVERTEXELEMENT9 结构的数据描述顶点

2.  创建顶点声明

HRESULT  IDirect3DDevice9::CreateVertexDeclaration(CONST D3DVERTEXELEMENT9  *PVertexElements, IDirect3DVertexDeclaration9 **ppDec);

ppDec:返回创建的接口指针

3.  使用顶点声明

Device->SetVertexDeclaration(_decl);

顶点数据用途:

定义顶点声明的元素到顶点着色器的Input结构的数据成员

struct VS_INPUT

{

vector position: POSITION; //位置

vector normal: NORMAL0;  //法线向量

vector faceNormal1: NORMAL1;

vector faceNormal2: NORMAL2;

}受支持的顶点着色器用途有:位置、混合权重、混合索引、法线向量、顶点大小、散射颜色、镜面颜色、纹理坐标等

使用顶点着色器的步骤:

1.编写并编译顶点着色器;

(D3DXCompileShaderFromFile()返回已编译着色器代码的指针,作为step2的输入)

2.创建一个IDirect3DVertexShader9接口以引用已编译的着色器代码上的顶点着色器;

(CreateVertexShader((DWORD*)shader->GetBufferPoint(),&ToonShader),返回一个接口指针,作为step3的输入)

3.用IDirect3Device9::SetVertexShader方法使用这个顶点着色器。

(Device->SetVertexShader(ToonShader);)

4.销毁顶点着色器

(d3d::Release<IDirect3DVertexShader9 *>(ToonShader);)

原文地址:https://www.cnblogs.com/italysue/p/9369839.html

时间: 2024-10-21 16:38:36

DirectX9 着色器学习(二)的相关文章

顶点着色器 学习笔记

顶点着色器 shader的三种变量类型 uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息:如果在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用:只读常量数据: attribute变量是只能在vertex shader中使用的变量:一般用attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等: varying变量是vertex和fragment shader之间做数据传递用.一般vertex

OpenGL ES 3.0顶点着色器(二)

#version 300 es uniform mat4 u_mvpMatrix; in vec4 a_position; in vec4 a_color;out vec4 v_color;void main() { v_color = a_color; gl_Position = u_mvpMatrix * a_position; } 上面是一段顶点着色器代码. #version 300 es 出现在顶点着色文件的第一行,说明着色语言版本是3.0(shading language 3.0) u

Android学习笔记&mdash;&mdash;OpenGL ES的基本用法、绘制流程与着色器编译

首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上,开发者可以使用跨平台应用编程接口创建二维或者三维图形,或进行图像处理和计算机视觉应用,结合两者将能构建丰富有趣的交互体验.前者称为OpenGL,后者称为OpenCV,不过本文主要介绍前者,OpenCV在后续文章中涉及.OpenGL应用于桌面系统的历史已经很长了,但考虑到移动平台的特点(计算能力.性能等),将

nBodyCS&lt;I&gt;学习笔记之计算着色器

nBodyCS<I>学习笔记之计算着色器 Nvidia-SDK(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. DirectX一直是Windows上图形和游戏开发的核心技术.DirectX提供了一种在显卡上运行的程序--着色器(Shader).从DirectX11开始,DirectX增加了一种计算着色器(Compute Shader),它是专门为与图形无关的通用计算设计的.因此DirectX就变成了一个通用GPU计算的平台.鉴于GPU拥有极其强大的并行运算能力,学习使用Direct

JMeter学习-009-JMeter 后置处理器实例之 - 正则表达式提取器(二)多参数获取

前文简述了通过后置处理器 - 正则表达式提取器 获取 HTTP请求 响应结果中的特定数据,未看过的亲,敬请参阅 JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一). 此文主要对正则表达式提取器的 正则表达式.模板.匹配数字,三者的关系,做进一步的讲解. 截取商品列表响应结果数据中的一段商品数据如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 {     "s

OpenGL学习日记-2015.3.5——Hello glsl(着色器)

过年前忍不住买了本新版的OpenGL编程指南,主要的目的还是为了系统的学习着色器编程,另外就是接触新版的OpenGL技术和思想.看了几页,就过年了QAQ.回来后也是各种不在状态,不想上班,不想工作,不想写代码...昨天终于强迫自己继续看书,也找回了些状态. 书本基础知识的全面性和权威性就不用说了,不过这个源代码就....这第一个例子照着代码来抄结果...我想应该是原来的代码一个参数错了,折腾了半天,代码分析是详说.主要是分析代码,有什么说什么,并没有全面的说明着色器的基本内容,想着在着色器的基础

OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)

OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章) 4.5精度和精度修饰符 4.5.1范围和精度 用于存储和展示浮点数.整数变量的范围和精度依赖于数值的源(varying,uniform,纹理查找,等等),是不是顶点或者片元着色器,还有其他一些底层实现的细节.最低存储需要通过精度修饰符来声明.典型地,精度操作必须要保留变量包含的精度存储.仅有的例外是需要大量复杂计算的内建函数,如atan(),返回值的精度低于声明的精度. 强烈建议顶点语言提供一种匹配IEEE单精度浮点数或更高精

OpenGL学习笔记5:着色器

初识着色器语言 变量和数据类型 可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值. OpenGL着色语言中没有指针和字符串或字符.返回值可以为void. 向量类型 所有4种基本数据类型都可以存储在二维.三维或者四维向量中: OpenGL着色语言向量数据类型 类型 描述 vec2,vec3,vec4 2分量.3分量和4分量浮点向量 ivec2,ivec3,ivec4 2分量.3分量和4分量整数向量 uvec2,uvec3,uvec4 2分量.3分量和4分量无符号整数向量 bvec2,

着色器编程学习(一)——类波浪+生成法线

图形着色器--理论与实践(第2版)  这个书在一些翻译上比较坑,而且案例都是都不完整,更重要的是中文翻译版本竟然没有书的网站也就是说没有案例代码. 所以在此我说一下网址:http://cgeducation.org/ShadersBookSecond/Source/ Demo.glib Ortho -1. 1. -1. 1 .. 1 1000.Vertex demo.vertFragment demo.fragProgram DomeColor 1. .5 0. QuadXY -2. 5. 20