특수 효과
여기에서는, 텍스처 좌표 처리에 의해 실현되는 특수 효과의 예를 나타낸다.
모델상에서 텍스처를 애니메이션 한다 (평행이동 또는 회전을 이용)
- 2 차원 (2D) 텍스처 좌표를 정점 포맷에 정의한다.
// Use a single texture, with 2-D texture coordinates.This
// bit-pattern should be expanded to include position, normal,
// and color information as needed.
DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
- 2D 텍스처 좌표를 사용하도록(듯이) 래스터라이저를 설정한다.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
- 적절한 텍스처 좌표변화 행렬을 정의해 설정한다.
// M is a D3DMATRIX being set to translate texture
// coordinates in the U and V directions.
// 1 0 0 0
// 0 1 0 0
// du dv 1 0 (du and dv change each frame)
// 0 0 0 1
D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h
M. _31 = du;
M. _32 = dv;
모델의 카메라 공간 위치의 선형 함수로서 텍스처 좌표를 생성 한다
- D3DTSS_TCI_CAMERASPACEPOSITION 플래그를 사용해, 카메라 공간의 정점 위치를 입력으로서 텍스처 변환에 건네준다.
// The input vertices have no texture coordinates, saving
// bandwidth.Three texture coordinates are generated by
// using vertex position in camera space (x, y, z).
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
- 래스터라이저로 2D 텍스처 좌표를 평가한다.
// Two output coordinates are used.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
- 선형 함수를 적용하는 행렬을 정의해 설정한다.
// Generate texture coordinates as linear functions
// so that:
// u = Ux*x + Uy*y + Uz*z + Uw
// v = Vx*x + Vy*y + Vz*z + Vw
// The matrix M for this case is:
// Ux Vx 0 0
// Uy Vy 0 0
// Uz Vz 0 0
// Uw Vw 0 0
SetTransform(D3DTS_TEXTURE0, &M);
큐브 환경 맵에 의한 환경 맵핑을 실행한다
- D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 플래그를 사용해, 큐브 맵용의 반사 벡터로서 텍스처 좌표를 자동적으로 생성한다.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
- 래스터라이저에, 3 개의 요소를 가지는 텍스처 좌표를 사용하도록 지시한다.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
투영 텍스처를 실행한다
- D3DTSS_TCI_CAMERASPACEPOSITION 플래그를 사용해, 텍스처 변환에 정점 위치 좌표를 입력으로서 건네준다.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
- 텍스처 투영 행렬을 생성 해 적용한다. 이것은 문서의 대상외이며, 다른 논문이나 기사로 다루어지는 내용이다.
- 래스터라이저에 3 개의 요소를 가지는 투영 텍스처 좌표를 사용하도록 지시한다.
// Two output coordinates are used.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);