5. 텍스처 필터링
• 텍스처에서 텍셀을 읽어올 때 계단현상을 막기위해 텍
스처 필터를 사용한다.
필터의 종류 효과 명칭
D3DTEXF_NONE 필터를 사용하지 않음
D3DTEXF_POINT 최근점 필터링 최근점 필터링
D3DTEXF_LINEAR 선텍된 텍셀의 상하좌우 평균값 선형 필터링
D3DTEXF_ANISOTRO
PIC
텍스처 왜곡 현상을 막기 위해 보간할 때
여러 픽셀을 취해서 얻는 값
이방성 필터링
D3DTEXF_PYRAMIDA
LQUAD
피라미드 형태로 4개의 샘플을 취한 값 피라미드 쿼드
D3DTEXF_GAUSSIAN
QUAD
샘플 네개의 가우스 필터 값 가우시안 쿼드
6. 멀티 텍스처
• 하나의 폴리곤이 그려질 때 여러장의 텍스처를
중첩하여 출력하는 것
• 텍스처 스테이지: 텍스처를 중첩 출력하기 위해
임시 보관하는 영역
• 텍스처 스테이지는 2개의 입력을 받아서 이 둘을
합성한 다음 다음 단계의 스테이지로 내보낸다.
7. 멀티 텍스처 사용법
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );///0번 텍스처: 0번 텍스처 인덱스 사용
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );///1번 텍스처: 0번 텍스처 인덱스 사용
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_GAUSSIANQUAD );/// 0번 텍스처 스테이지의 확대 필
g_pd3dDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );/// 1번 텍스처 스테이지의 확대 필터
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );/// 1번째 인자의 컬러를 선택
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );/// 1번째 인자는 텍스처의 컬러값을 쓴다
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );/// 1번째 인자의 알파값을 선택
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );/// 1번째 인자는 텍스처의 알파값을 쓴다
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE );
/// MODULATE연산으로 색깔을 섞음
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
///1번째 인자로는 텍스처의 값을 사용
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
///2번째 인자로는 스테이지 0에서 합성된 값을 선택
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE );// 이전에 설정된 스테이지2의 설정값을
거하기 위해 사용
g_pd3dDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
8. 빌보드
• 이미지를 사용하여 화면에 출력하기 위해 구현
• 보는 방향이 바뀜에 따라서 이미지가 바뀐다.
• 원리
– 메시의 정면이 항상 카메라를 향하도록 한다.
• 카메라 회전 행렬 중에서 Y축 회전 행렬값을 뽑는다.
• Y축 회전 행렬의 역행렬을 구한다.
• 역행렬을 변환행렬로 해서 메시를 출력한다.
• 응용
– 빌보드에 카메라를 고정시켜서 3D를 사용해서 2D를
이미지를 보여주는 데 사용할 수 있다.
– 빌보드로 배경을 처리하여 연산량을 줄일 수도 있다.
9. 법선 맵핑
• 텍셀에 법선 백터값을 가지고 광원연산을 하여
픽셀단위의 조명을 구현한다
• 종류
– 오브젝트 공간 법선맵: 오브젝트의 원점과 법선 백터의 원점이 같다
– 접선 공간 법선맵: 모든 법선 백터를 각 정점의 접선 공간으로 변환하여 보관
• 벡터-> ARGB
– R = (DWORD)(127.0*x + 128.),G,B,A
– 접선 공간 법선 맵이면 Z=1.0 ,A값을 생략해서 RG(16:16)으로 변환
• 법선맵의 생성
– 높이 맵
• 텍스처를 흑백 이미지로 변환하여 높이 맵을 만들고 이렇게 만들어진 미분 백터들을
RGB값으로 변환하여 텍셀에 저장 한다.
– 오브젝트 비교
• 저폴리곤의 텍셀 위치에서 반직선을 쏴서 고폴리곤과 접하는 지점의 법선백터값
10. 애니메이션
• 종류
– 정점 애니메이션
• 각 정점의 위치를 프레임마다 저장하여 보간
– 계층적 애니메이션
• 메시별 매트릭스를 프레임마다 저장하여 사용
– 뼈대 애니메이션
• 계층적 애니메이션을 발전 뼈대를 만들어 메시를 자식으로 붙임
– 스키닝
• 뼈대에 가중치를 사용 관절 부위 문제 해결(팔레트,쉐이더)
– 역운동학
• 물리학 역학이론을 사용하여 자연스러운 애니매이션을 표현
• 키 프레임 애니메이션
– 전체 애니메이션 중 중요한 몇 개의 프레임에 애니메이션 키값을 등록
하고 나머지 값은 보간을 통해 자동 생성하는 애니메이션
• 선형 보간(위치보간)
– a * (1-t) + b * t ( 0<= t <= 1)
• 사원수 보간(회전보간)
– 회전의 경우 사원수 보간을 사용하고 위치보간시 계산량을 줄일 수 있
다.
11. 계층 구조
• 트리를 사용하여 관절체로 이루어진 물체를 부모
-자식관계의 계층구조로 구현
• 구현
– Vworld = Vlocal * TMchild * TMparent(n) * TMparent(n-1) … * TMparent(1)
• 자식의 직계 부모의 행렬이 먼저 곱해지고 최상위 행렬이 나중에 곱해진다.
부모 메시 자식 메시
부모
최종
행렬
Mparent = Rparent * TMparent
자식
최종
행렬
Mchild = Rchild * TMchild * Mparent
= Rchld * TMchld * (Rparent *
TMparent)
12. 스키닝
• 스키닝: 메시와 메시를 연결할 때 자연스
럽게 이어붙이는 기술들의 총칭
– 메시와메시가 연결부위가 자연스럽게 붙지 않
는 관절 끊김 현상이 있다.
– 메시를 단일한 하나의 메시로 만드는 법(부자
연스러움)
– 메시 정점에 가중치를 사용하는 방법
• 본: 본의 가중치 값과 본 애니메이션 행렬을 적용
• 바이패드
• 매트릭스 팔레트: 가중치에 따라 다른 행렬을 곱함