DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 라이트와 머트리얼 머트리얼   [목차열람] [주소복사] [슬롯비우기]
머트리얼
 
Microsoft DirectX 9.0

머트리얼


머트리얼은, 3D 장면으로 다각형이 빛을 어떻게 반사하는지, 또는 어떻게 빛을 방사하는 것처럼 보이는지를 지정한다. 본질적으로는, 머트리얼은, Microsoft® Direct3D® 가 렌더링 하는 다각형에 대해 다음의 정보를 Direct3D 에 지시하는 프로퍼티의 집합이다.

C++ 로 기술된, Direct3D 애플리케이션에서는,D3DMATERIAL9 구조체를 사용해 머트리얼 프로퍼티를 정의한다. 더 자세한 정보는, 「머트리얼 프로퍼티」를 참조할것.

머트리얼 프로퍼티의 설정

Direct3D 렌더링 장치에서는, 한 번에 1 개의 머트리얼 프로퍼티세트로 렌더링 할 수 있다.

C++ 애플리케이션의 경우, 시스템으로 사용하는 머트리얼 프로퍼티를 설정하려면 ,D3DMATERIAL9 구조체를 준비해, 다음에 IDirect3DDevice9::SetMaterial 메서드를 호출한다.

D3DMATERIAL9 구조체를 준비하려면 , 이 구조체에 프로퍼티 정보를 설정해, 렌더링에서의 목적의 이펙트를 생성 한다. 다음 코드는, 샤프한 백색의 스펙큐러 하이라이트가 있는, 보라색의 머트리얼용의 D3DMATERIAL9 구조체를 설정한다.

D3DMATERIAL9 mat;

// Set the RGBA for diffuse reflection.
mat.Diffuse.r = 0.5f;
mat.Diffuse.g = 0.0f;
mat.Diffuse.b = 0.5f;
mat.Diffuse.a = 1.0f;

// Set the RGBA for ambient reflection.
mat.Ambient.r = 0.5f;
mat.Ambient.g = 0.0f;
mat.Ambient.b = 0.5f;
mat.Ambient.a = 1.0f;

// Set the color and sharpness of specular highlights.
mat.Specular.r = 1.0f;
mat.Specular.g = 1.0f;
mat.Specular.b = 1.0f;
mat.Specular.a = 1.0f;
mat.Power = 50.0f;

// Set the RGBA for emissive color.
mat.Emissive.r = 0.0f;
mat.Emissive.g = 0.0f;
mat.Emissive.b = 0.0f;
mat.Emissive.a = 0.0f;

D3DMATERIAL9 구조체를 준비하면 렌더링 장치의 IDirect3DDevice9::SetMaterial 메서드를 호출해 이 프로퍼티를 적용한다. 이 메서드에는, 준비한 D3DMATERIAL9 구조체의 주소를 유일한 파라미터로서 지정한다. 장치의 머트리얼 프로퍼티의 갱신이 필요한 때는, 새로운 정보로 IDirect3DDevice9::SetMaterial 를 호출할 수가 있다. 이상의 처리를 다음 샘플 코드에 나타낸다.

// This code example uses the material properties defined for 
// the mat variable earlier in this topic.The pd3dDev is assumed
// to be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
hr = pd3dDev->SetMaterial(&mat);
if(FAILED(hr))
{
    // Code to handle the error goes here.
}

Direct3D 장치를 생성 하는 경우는, 이하의 표에 나타내도록(듯이) 현재의 머트리얼은 자동적으로 디폴트로 설정된다.

멤버
Diffuse(R:1, G:1, B:1, A:0)
Specular(R:0, G:0, B:0, A:0)
Ambient(R:0, G:0, B:0, A:0)
Emissive(R:0, G:0, B:0, A:0)
Power(0.0)

머트리얼 프로퍼티의 취득

장치에 대해서 IDirect3DDevice9::GetMaterial 메서드를 호출해, 렌더링 장치로 현재 사용하고 있는 머트리얼 프로퍼티를 얻어온다. IDirect3DDevice9::SetMaterial 메서드의 경우와는 달라,IDirect3DDevice9::GetMaterial 에서는 준비는 필요없다. IDirect3DDevice9::GetMaterial 메서드에는,D3DMATERIAL9 구조체의 주소를 지정한다. 이 메서드는, 종료전에 이 구조체에 현재의 머트리얼 프로퍼티의 정보를 기입한다.

// For this example, the pd3dDev variable is assumed to 
// be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
D3DMATERIAL9 mat;

hr = pd3dDev->GetMaterial(&mat);
if(FAILED(hr))
{
    // Code to handle the error goes here.
}

머트리얼 프로퍼티의 더 자세한 정보는, 다음 주제를 참조할것.

  애플리케이션으로, 렌더링 처리에 머트리얼 프로퍼티가 지정되지 않은 경우는, 디폴트의 머트리얼이 사용된다. 디폴트의 머트리얼은, 모든 디퓨즈 라이트 (백색등)를 반사하지만, 앰비언트 반사 또는 스펙큐러 반사는 생기지 않고, 에미션(emission)색이 없다.


© 2002 Microsoft Corporation. All rights reserved.
↑TOP