텍스쳐 매핑.

반응형

기억하기 :
d3d 에서 텍스쳐는 세이더 자원으로 취급된다.
세이더 자원은 세이더 자원뷰의 형태로 세이더에게 전달되며 이미 생성된 텍스쳐 자원이나
텍스쳐 파일을 직접로드하여 세이더 자원뷰를 생성할 수 있다.

텍스쳐 자원으로 부터 세이더자원뷰의 생성.
ID3D10ShaderResourceView* textureView   = NULL;
ID3D10EffectShaderResourceVariable* texDiffuseVariable = NULL;
D3DX10CreateShaderResourceViewFromFile(device, L"back.jpg", NULL, NULL, &textureView, NULL);

그 후에는 세이더 텍스쳐 상수버퍼 변수에 대한 효과변수 포인터를 얻어 세이더 자원뷰를 지정한다.
texDiffuseVariable = effect->GetVariableByName("texDiffuse")->AsShaderResource();
texDiffuseVariable->SetResource(textureView);

- 정점세이더는 입력정점들을 클립공간으로 변환하는 역활을 한다.
- 세이더 변수들의 사용빈도에 따라 상수버퍼를 여러개로 나누어 선언하자.
  세이더 변수들을 용도에 따라 분류하여 별도의 상수버퍼들로 구성하면 응용프로그램이
  세이더 변수의 값을 갱신하는데 최소한의 전송만 이루어 지도록 하므로 효율적이다.
  ex)
   한번 지정되면 계속 바뀌지 않는 변수들, 윈도크기가 바뀔때 값이 바뀌는 변수들,
   매 프레임마다 바뀌는 변수들과 같은 기준으로 상수버퍼를 만들 수 있다.

- 픽셀세이더에서는 텍스쳐 패밍을 위해 텍스쳐 룩업함수인 Sample함수를 호출하여
  현재 픽셀에서의 텍셀 컬러를 구하도록 한다. Sample 함수가 리턴한 컬러값과 표면의 
  재질 컬러값을 곱한값이 최종 컬러값이 된다.

SamplerState samLinear
{
 Filter = MIN_MAG_MIP_LINEAR;
 AddressU = Wrap;
 AddressV = Wrap;
};

float4 PS(PS_Input input) : SV_Target
{
 return texDiffuse.Sample(samLinear, input.tex);
}


'Study > Directx 10' 카테고리의 다른 글

TextureAddressMode  (0) 2010.05.23
좌표변환 (로컬 <-> 화면)  (0) 2010.05.18
Texture load  (0) 2010.05.15
방향성광원, 점광원  (0) 2010.05.15
광원(확산, 정반사, 환경)  (0) 2010.05.15
TAGS.

Comments