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. }
머트리얼 프로퍼티의 더 자세한 정보는, 다음 주제를 참조할것.