- 3
- 0
- 约8.2千字
- 约 5页
- 2017-06-07 发布于重庆
- 举报
D3D10指南2-2
声明:
? 2012 刘邓 hfutld@yeah.net. All rights reserved.
翻译说明:
1./ 这个符号出现在我翻译一个单词或者词组不确定时可能的选项
2.() 出现在一个汉语词组后,标示这个单词比较关键或者我不认识。
3.在一段中文译文后出现一段原文,说明这一段我翻译的不得要领,还忘自己慎重考虑
4.文中翻译的英文出处为DirectX SDk(2010 JUNE)的帮助文档,具体内容请到微软官网下载查阅。
5.由于本人才疏学浅,错误之处在所难免还望您不吝赐教。
6.最后祝大家天天开心~
指南2-2:渲染一个三角形(续)
Ps.接指南2-1
顶点布局(Vertex Layout)
在下一个教程中,我们将解释技术对象(technique objecy)以及相关的着色器。现在我们只关注于为这项技术创建一个Direct3D10顶点布局对象。然而我们会发现这项技术和顶点布局是紧密结合在一起的。原因在于在创建顶点布局对象时需要用到顶点着色器输入签名(signature)。我们首先调用这项技术的GetPassByIndex()函数来获取一个代表这项技术的第一个传递的效果传递对象。然后我们调用这个传递对象的GetDesc()函数来获得一个传递描述结构体。在这个结构体内有有一个名为pIAInputSignature的字段指向这个传递对象中顶点着色器的输入签名的二元数据。一旦我们获取了这个数据,就可以调用ID3D10Device::CreateInputLayout()函数来创建一个顶点布局对象,然后调用ID3D10Device::IASetInputLayout()函数来设置它为活动的顶点布局。完成上述内容的代码如下:
// Create the input layout
D3D10_PASS_DESC PassDesc;
g_pTechnique-GetPassByIndex( 0 )-GetDesc( PassDesc );
if( FAILED( g_pd3dDevice-CreateInputLayout( layout, numElements, PassDesc.pIAInputSignature,
PassDesc.IAInputSignatureSize, g_pVertexLayout ) ) )
return FALSE;
// Set the input layout
g_pd3dDevice-IASetInputLayout( g_pVertexLayout );
创建顶点缓存
在初始化过程中另外一件需要完成的工作是为顶点数据创建存储的顶点缓存。在D3D10中创建一个顶点缓存需要填充2个结构体:D3D10_BUFFER_DESC以及D3D10_SUBRESOURSE_DATA,然后调用ID3D10device::CreatBuffer()函数。D3D10_BUFFER_DESC描述需要创建的顶点缓存对象,而D3D10_SUBRESOURCE_DATA则描述在创建顶点缓存是确切复制到顶点缓存内的值。
创建和初始化顶点缓存是一起立刻完成的,因此稍后我们不必再去初始化缓存。将要被复制到顶点缓存的是一系列的顶点:一个包含3个SimpleVertex结构体的数组。在这个顶点数组内的坐标系被选取因此我们可以发现一个使用我们着色器渲染的三角形出现在窗口程序的中间。当顶点缓存创建完毕后我们调用ID3D10Device::IASetVertexBuffers()函数来把它绑定到设备上去。全部代码如下:
// Create vertex buffer
//创建顶点缓存
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;
if( FAILED( g_pd3dDevice-CreateBuffer( bd, InitData, g_pVertexBuffer ) ) )
原创力文档

文档评论(0)