d3d学习 Tutorial 2

这个例子是展示如何渲染个三角形。

首先提到了一个概念顶点缓冲区,顾名思义专门用来存储顶点的缓冲区,要表示一个三角形则需要存储三个顶点。

顶点有很多属性,如法线,颜色等等。顶点的布局取决于它的属性如何放在内存里,顶点通常由一个struct表示。

struct SimpleVertex
{
    XMFLOAT3 Pos;  // Position
};

现在我们可以用这个结构来表示顶点。也就是缓冲区的每个节点都是这么一个结构,但是我们向gpu提供的是一个内存块,它必须知道我们顶点结构的布局是怎样的,不然它无法读出来。所以我们必须使用输入布局。输入布局对象是d3d对象。输入对象会将结构转换为gpu能理解的D3D11_INPUT_ELEMENT_DESC结构。D3D11_INPUT_ELEMENT_DESC的每个字段含义请看msdn。

D3D11_INPUT_ELEMENT_DESC layout[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },  
};
UINT numElements = ARRAYSIZE(layout);

接下来是创建顶点布局对象,设置其为活动顶点布局。

// Create the input layout
if( FAILED( g_pd3dDevice->CreateInputLayout( layout, numElements, pVSBlob->GetBufferPointer(), 
        pVSBlob->GetBufferSize(), &g_pVertexLayout ) ) )
    return FALSE;
// Set the input layout
g_pImmediateContext->IASetInputLayout( g_pVertexLayout );

创建并初始化顶点缓冲区,下面用3个顶点来初始化缓冲区,创建和初始化是同时工作的。最后再将其绑定到设备。

指定三角形列表,用来描述多个三角形。

g_pImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );

执行渲染,使用两个渲染器,顶点渲染器和像素渲染器。前者用于将顶点转换为正确的位置,后者计算顶点最后输出的颜色。

// Render a triangle 
g_pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
g_pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
g_pImmediateContext->Draw( 3, 0 );

猜你喜欢

转载自blog.csdn.net/qq_34262582/article/details/86407562
今日推荐