DirectX Graphics 프로그래밍 가이드 프로그래밍 가능한 파이프라인 프로그래밍 가능한인 스트림 모델 컬러 정점의 셰이더   [목차열람] [주소복사] [슬롯비우기]
컬러 정점의 셰이더
 
Microsoft DirectX 9.0

컬러 정점의 셰이더


여기에서는, 위치와 디피즈색을 가지는 단순한 정점 셰이더의 초기화와 사용에 필요한 스텝에 대해 설명한다.

최초의 스텝에서는, 위치와 색을 저장 하는 구조체를 선언한다. 이것을, 다음 샘플 코드에 나타낸다.

struct XYZBuffer
{
    FLOAT x, y, z;
};

struct ColBuffer
{
    D3DCOLOR color;
};

다음의 스텝에서는, 정점 셰이더 선언을 생성 한다. 이것을, 다음 샘플 코드에 나타낸다.

D3DVERTEXELEMENT9 decl[] = 
{
    { 0, 0, D3DDECLTYPE_FLOAT3,   D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 1, 0, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR,    0 },
    D3DDECL_END()
};

여기서, 정점 선언 개체를 생성 한다.

 
LPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration;
g_d3dDevice->CreateVertexDeclaration( decl, &m_pVertexDeclaration );

다음의 스텝에서는,IDirect3DDevice9::CreateVertexShader 메서드를 호출해 정점 셰이더를 생성 한다. 최초로, 셰이더를 어셈블(assemble) 할 필요가 있다.

 
TCHAR               strVertexShaderPath[512];
LPD3DXBUFFER        pCode;
LPDIRECT3DVERTEXSHADER9	m_pVertexShader;

hr = DXUtil_FindMediaFileCb( strVertexShaderPath, 
                      sizeof(strVertexShaderPath), _T("ShaderFile.vsh");

hr = D3DXAssembleShaderFromFile( strVertexShaderPath, NULL, NULL, 
                      dwFlags, &pCode, NULL );

g_d3dDevice->CreateVertexShader( (DWORD*) pCode->GetBufferPointer(),
                      &m_pVertexShader );

다음 샘플 코드는, 정점 셰이더의 설정 방법법, 스트림 소스의 설정 방법법, 및 삼각형 리스트의 렌더링 방법을 나타내고 있다.

g_pd3dDevice->SetVertexDeclaration( m_pVertexDeclaration );
g_d3dDevice->SetVertexShader( m_pVertexShader );
g_d3dDevice->SetStreamSource( 0, xyzbuf, sizeof(XYZBuffer));
g_d3dDevice->SetStreamSource( 1, colbuf, sizeof(ColBuffer));
g_d3dDevice->SetIndices( pIB, 0 );
g_d3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 
                                   0, max - min + 1, 0, count / 3 );


© 2002 Microsoft Corporation. All rights reserved.
↑TOP