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

멀티 텍스처의 셰이더


여기에서는, 위치와 복수의 텍스처 좌표를 가지는 단순한 정점 셰이더의 초기화와 사용에 필요한 스텝에 대해 설명한다.

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

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

struct Tex0Buffer
{
    float tu, tv;
};

struct Tex1Buffer
{
    float tu2, tv2;
};

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

 
D3DVERTEXELEMENT9 decl[] = 
{
    { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 1, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
    { 2, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
    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 );

정점 버퍼와 정점 셰이더는, 생성 후는 언제라도 사용할 수 있다. 다음 샘플 코드는, 정점 셰이더의 설정 방법법, 스트림 소스의 설정 방법법, 및 새로운 정점 셰이더를 사용하는 삼각형 리스트의 드로잉(Drawing) 방법을 나타내고 있다.

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


© 2002 Microsoft Corporation. All rights reserved.
↑TOP