DX10基础学习笔记(2)
来源:互联网 发布:linux停止ping命令 编辑:程序博客网 时间:2024/06/11 12:33
Tutorial02和Turorial03程序代码一样,在屏幕上绘制一个三角形,主要涉及2个主要方面的工作:创建要绘制的三角形几何数据;创建几何体的渲染效果。最后在渲染函数中进行设置。
1.创建几何数据,并将数据送入GPU
(1)定义顶点数据结构
struct SimpleVertex
{
D3DXVECTOR3 Pos;
};
(2)向GPU描述顶点结构。由于顶点通过顶点缓冲区送入GPU中处理,因此需要向GPU说明送入的数据是怎样的一个格式,说明方法如下:
// 声明输入格式
D3D10_INPUT_ELEMENT_DESC layout[] =
{
{ L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = sizeof(layout)/sizeof(layout[0]);
// 创建输入格式
D3D10_PASS_DESC PassDesc;
g_pTechnique->GetPassByIndex( 0 )->GetDesc( &PassDesc );
g_pd3dDevice->CreateInputLayout( layout, numElements, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &g_pVertexLayout );
// 设置输入格式(将输入的格式传给GPU)
g_pd3dDevice->IASetInputLayout( g_pVertexLayout );
(3)创建描述几何体形状的顶点缓冲区
// 创建顶点缓冲区
SimpleVertex vertices[] =
{
D3DXVECTOR3( 0.0f, 0.5f, 0.5f ),
D3DXVECTOR3( 0.5f, -0.5f, 0.5f ),
D3DXVECTOR3( -0.5f, -0.5f, 0.5f ),
};
D3D10_BUFFER_DESC bd;
bd.Usage = D3D10_USAGE_DEFAULT;
bd.ByteWidth = sizeof( SimpleVertex ) * 3;
bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
bd.MiscFlags = 0;
D3D10_SUBRESOURCE_DATA InitData;
InitData.pSysMem = vertices;
g_pd3dDevice->CreateBuffer( &bd, &InitData, &g_pVertexBuffer );
// 设置顶点缓冲区
UINT stride = sizeof( SimpleVertex );
UINT offset = 0;
g_pd3dDevice->IASetVertexBuffers( 0, 1, &g_pVertexBuffer, &stride, &offset );
2. 定义效果,即用HLSL语言创建shader文件,包括顶点着色器和像素着色器(好像还有几何着色器Geometry Shader),以及渲染效果
(1)顶点着色器
float4 VS(float4 Pos : POSITION) : SV_POSITION
{
return Pos;
}
(2)像素着色器
float4 PS(float4 Pos : SV_POSITION) : SV_TARGET
{
return (1.0f, 1.0f, 0.0f, 1.0f); // r,g,b,a
}
(3)渲染效果(Technique10)。即VS,GS,PS的组合即为一个通道(Pass),多个通道的集合称为Technique10
technique10 Render
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
3.创建效果
// Create the effect
D3DX10CreateEffectFromFile( L"Tutorial03.fx", NULL, NULL, D3D10_SHADER_ENABLE_STRICTNESS, 0, g_pd3dDevice, NULL, NULL, &g_pEffect, NULL )
// Obtain the technique
g_pTechnique = g_pEffect->GetTechniqueByName( "Render" );
4. 渲染几何体
(1)如果几何体由多个三角形组成,需要指明顶点缓冲区的访问方法是简单三角形列表,三角形条带,三角形扇面。
g_pd3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
(2)在Render函数中,应用渲染效果,绘制几何体
D3D10_TECHNIQUE_DESC techDesc;
g_pTechnique->GetDesc( &techDesc );
for( UINT p = 0; p < techDesc.Passes; ++p )
{
g_pTechnique->GetPassByIndex( p )->Apply(0);
g_pd3dDevice->Draw( 3, 0 );
}
- DX10基础学习笔记(2)
- DX10基础学习笔记(1)
- dx10 学习随笔(一)
- dx10 学习随笔(二)
- dx10 学习随笔(三)
- dx10 学习随笔(四)
- dx10 学习随笔(五)
- DirectX 10 学习笔记1:VS2010环境中配置DX10或DX11
- java基础学习笔记2
- java基础学习笔记2
- mysql基础学习笔记-2
- java基础学习笔记2
- Python学习笔记,基础2
- java 基础学习笔记2
- Java基础学习笔记2
- 数据库基础学习笔记2
- AS3.0基础学习笔记(2): 对象
- J2ME学习笔记(基础2)
- 线性汇编随记
- 如何讓Form變型及漸漸淡出及透明
- mysql linux下的乱码问题
- boost graph libaray: my own note(1)
- 折腾博客模板一个小时,无奈放弃
- DX10基础学习笔记(2)
- 跟老紫竹学Java-留言板-服务接口的Hibernate实现
- 线性汇编经验总结
- php生成翻页链接列表函数
- 将DropList以树形的方式显示
- PDA嵌入开发的环境配置及通用类,安装包说明
- 转:Joel Spolsky给计算机系学生的几点建议
- [发图留念]新建地图面板做好了!
- 在WebForm1里单击按钮弹出新页面WebForm2,在WebForm2输入数据后返回WebForm1