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

정점색


이 예에서는, 정점 데이터내의 정점색을 개체에 적용한다. 정점 데이터에는, 위치의 데이터와 디퓨즈색의 데이터가 포함되어 있다. 이것들을 다음에 나타낸다.

struct CUSTOMVERTEX_POS_COLOR
{
    float       x, y, z;
    DWORD       diffuseColor;
};

// Create vertex data with position and texture coordinates.
CUSTOMVERTEX_POS_COLOR g_Vertices[]=
{
    //  x      y     z     diffuse   
    { -1. 0f, 0.25f, 0.0f, 0xffff0000,  },	//  lower right - red
    {  0.0f, 0.25f, 0.0f, 0xff00ff00,  },	//  lower left - green
    {  0.0f, 1.25f, 0.0f, 0xff0000ff,  },	//  upper left - blue
    { -1. 0f, 1.25f, 0.0f, 0xffffffff,  },	//  upper right - white
};

정점 셰이더의 선언에는, 위치와 색의 데이터도 반영시킬 필요가 있다.

// Create the shader declaration.
D3DVERTEXELEMENT9 decl[] = 
{
	{ 0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
	{ 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
	D3DDECL_END()
};

셰이더가 변환 행렬을 얻어온다 방법의 1 개는, 정수 레지스터로부터의 취득이다. 이것을 실시하려면 , SetVertexShaderConstant 를 호출한다.

D3DXMATRIX mat;
D3DXMatrixMultiply( &mat, &m_matView, &m_matProj );
D3DXMatrixTranspose( &mat, &mat );
hr = m_pd3dDevice->SetVertexShaderConstantF( 1, (float*) &mat, 4 );
if(FAILED(hr)) 
    return hr;

이 선언은, 1 스트림의 데이터를 선언한다. 이것에는, 위치와 컬러 데이터가 포함되어 있다. 컬러 데이터는 정점 레지스터 1 에 할당할 수 있다. 셰이더를 다음에 나타낸다.

vs_1_1              ; version instruction
m4x4 oPos, v0, c0   ; transform vertices by view/projection matrix
mov oD0, v1         ; load color from register 1 to diffuse color

여기에는 3 개의 명령이 포함되어 있다. 처음은 항상 버전의 명령이다. 2 번째의 명령은 정점을 변환 한다. 3 번째의 명령은, 정점 레지스터내의 색을 출력 디퓨즈색레지스터로 이동한다. 결과는, 정점색데이터를 사용한 출력 정점이다.

이 결과의 출력은, 다음과 같이 된다.

출력 정점



© 2002 Microsoft Corporation. All rights reserved.
↑TOP