3D를 "제대로" 공부하기 시작한지 일주일째
그동한 공부한것들 까먹을까봐 정리한다
공부한 내용들 (괄호엔 중요한 키워드)
-버텍스 버퍼를 이용해서 면 띄우기 (CreateVertexBuffer,DrawPrimitive)
-매트릭스를 이용한 월드,뷰,투영행렬 제어 (D3DXMATIRX,SetTransform,D3DXMatrixLookAtLH,D3DXMatrixPerspectiveFovLH)
-인덱스 버퍼를 추가하여 복잡한 메시 만들기 (CreateIndexBuffer, SetIndices)
-텍스쳐링 (D3DXCreateTextureFromFile, SetTexture)
-정점에 노멀값, 라이트 생성
-멀티 텍스쳐링 (SetTextureStageState)
-범프 텍스쳐링 (DotProduct3)
-사원수를 이용한 카메라 컨트롤 (D3DXQUATERNION)
-높이맵을 이용한 지형 제어 (D3DSPRITE_DESC, LockRect)
* 다이렉트3D 초기화나 여러가지 자잘한 코드는 기본적인 것 이므로 생략.
< 버텍스 버퍼를 이용한 면 띄우기 >
순서
1. 정점 구조체와 FVF값을 정의
2. 정점 구조체에 자료를 넣어준다
3. 버텍스 버퍼 생성 (CreateVertexBuffer)
4. 데이터 복사 (Lock, memcpy, Unlock)
5. 렌더 (DrawPrimitive)
이렇게 하면 간단한 면 정도만 띄울 수 있다.
<매트릭스를 이용한 월드,뷰,투영행렬 제어>
기본적으로 D3DXMATRIX 구조체를 이용
순서
1. 월드 행렬 선언,값 대입
2. 월드 행렬 적용
3. 뷰 행렬 선언, 값 대입 (D3DXMatrixLookAtLH)
4. 뷰 행렬 적용
5. 투영 행렬 선언, 값 대입 (D3DXMatrixPerspectiveFovLH)
6. 투영 행렬 적용
기본적으로 모든 행렬을 디바이스에 적용할땐 SetTransform을 이용한다.
<인덱스 버퍼를 추가하여 복잡한 메시 만들기>
순서
1. 정점 구조체,FVF 값 정의
2. 정점 버퍼 생성
3. 인덱스 구조 정의
4. 인덱스 자료구조 생성
5. 인덱스 버퍼 생성 (CreateIndexBuffer)
6. 인덱스 버퍼에 자료 복사 (Lock,memcpy,Unlock)
인덱스는 면을 그릴 때에 어느 정점을 이용한 면이냐 하는것으로, 삼각형을 기준으로 한다.
즉 인덱스 한 세트는 3개라는것.
보통 WORD 자료형을 쓰는 듯 하다
[ 인덱스 버퍼 이용한 정육면체 ]
<텍스쳐링>
순서
1. LPDIRECT3DTEXTURE9 를 선언하여 텍스쳐 로드 (D3DXCreateTextureFromFile)
2. 정점 버퍼 생성할 때에 uv값 (텍스쳐 좌표값) 추가
3. 렌더 (SetTexture)
좌표값은 0.0~1.0 사이의 float 값 이어야만 한다.
이이상은 좀 정리하기가 힘들어서 그만 읔ㅋㅋㅋㅋㅋ
아래는 했던거 스샷들
[계층구조]
이렇게 계층구조를 구성해 놓으면 겉에 도는 자식물체는 가운데 있는 어미의 행렬정보를 모두 물려받아 움직이게 된다.
뭐랄까.. 팔을 움직일때를 생각해보면 좋을듯
이걸 이용하면 RPG게임의 아바타 개념을 넣을 수 있지 않을까
[높이맵]
2D의 명암값, 즉 흑백으로 된 이미지를 읽어 흰 부분일수록 높게, 검을수록 낮은 지형 물체를 만드는 걸 말한다.
나름 스크립트 같은 개념 아닙니까!?
[범프매핑]
말그대로 튀어나와 보이도록 눈속임을 하는 맵핑기법.
흔히들 노멀맵이라고도 하던데...
텍스쳐는 내가 보던 책에 있던 샘플을 좀 썼음
흠.... 앞으로는
키프레임 애니메이션
스키닝 애니메이션
충돌체크 (으읔...)
이것들을 파야겠다.



덧글
올텐 2010/01/04 17:17 # 답글
첫댓글ㅡㅡ
둘키 2010/01/07 23:43 # 삭제 답글
차라리 달질말지