정리/Direct 3D
D3D Tutorial 07: IndexBuffer
D3D Tutorial 07: IndexBuffer
2013.02.13/**----------------------------------------------------------------------------------- * \brief 인덱스 버퍼 생성 * 파일: 소스.cpp * * 설명: 인덱스 버퍼(Index Buffer)란 정점을 보관하기 위한 정점 버퍼처럼 인덱스를 보관하기 위한 전용 객체다. D3D 학습 예제에는 이러한 예제가 IB를 사용한 예제가 없기 때문에 새롭게 추가한 것이다. *------------------------------------------------------------------------------------ */ #include /**-------------------------------------------------------..
D3D Tutorial 06: Meshes
D3D Tutorial 06: Meshes
2013.02.12/**----------------------------------------------------------------------------------- *\brief 메시 사용 *파일: 소스.cpp * *설명: 보다 멋진 기하 정보를 출력하기 위해서는 전문적인 3D모델러가 만든 모델을 * 파일로 읽어들이는 것이 일반적이다. 다행스럽게도 D3DX에는 강력한 X파일 * 처리 기능이 있어서 정점 버퍼, 인덱스 버퍼 생성 등의 많은 부분을 대신해 준다. * 이번 예제는 D3DXMESH를 이용하여 파일을 읽어서 이 파일과 연관된 재질과 * 텍스처를 함께 사용하는 것을 알아보자. *-------------------------------------------------------------------------..
D3D Tutorial 05: Textures
D3D Tutorial 05: Textures
2012.12.08#include "stdafx.h" // SHOW_HOW_TO_USE_TCI가 선언된 것과 선언되지 않은 것의 컴파일 결과를 반드시 비교해보자. #define SHOW_HOW_TO_USE_TCI LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 렌더링에 사용될 D3D 디바이스 LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 정점을 보관할 정점 버퍼 LPDIRECT3DTEXTURE9 g_pTexture = NULL; // 텍스처 정보 // 사용자 정점을 정의할 구조체 // 텍스처 좌표가 추가되었다는 것을 알 수 있다. struct CUSTOMVERTEX { D3..
D3D Tutorial 04: Lights
D3D Tutorial 04: Lights
2012.12.02#include "stdafx.h" LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 렌더링에 사용될 D3D 디바이스 LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 정점을 보관할 정점 버퍼 // 사용자 정점을 정의할 구조체 // 광원을 사용하기 때문에 법선벡터가 있어야 한다는 사실을 명심하자. struct CUSTOMVERTEX { D3DXVECTOR3 position; // 정점의 3차원 좌표 // 정점의 법선 벡터, 빛은 법선을 기준으로 반사되기 때문에, // 광원을 사용할때는 '반드시' 법선벡터가 있어야 처리가 가능하다. D3DXVECTOR3 norma..
DirectX 스터디: 월드 변환, 카메라 변환, 투영 변환
DirectX 스터디: 월드 변환, 카메라 변환, 투영 변환
2012.11.231. 월드 변환(World Transform) 월드 변환(World Transform)이란 현재 물체가 사용하는 지역 좌표계로부터 월드 좌표계로의 변환을 하는 동안 이동, 회전, 크기 변환 등의 변환을 거칩니다. 3차원 그래픽에서 모든 정점은 각자 자기만의 지역 좌표계상에서 정의됩니다. 이 지역 좌표계는 모델 좌표계라고도 합니다. 위의 이미지를 한번 보시면, 위의 물체는 고유한 원점을 기준으로 모델링되어 있습니다. 그런데, 한개가 아닌 여러개의 물체를 3차원 공간에 출력할 경우 어떤일이 벌어질까요? 여러개의 물체 모두 원점을 공유하는 일이 벌어져, 3차원 공간상에 모두 배치하게 되면 물체가 겹치게 됩니다. 이것들을 따로따로 출력하기 위해 로컬 좌표계를 월드 좌표계로 변환할 필요성이 생깁니다. 로컬 좌표계..
D3D Tutorial 03: Matrices
D3D Tutorial 03: Matrices
2012.11.23#include "stdafx.h" LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 렌더링에 사용될 D3D 디바이스 LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 정점을 보관할 정점 버퍼 // 사용자 정점을 정의할 구조체 struct CUSTOMVERTEX { FLOAT x, y, z; // 정점의 변환된 좌표 // FVF 선언 순서에 위배되면 절대로 작동하지 않고, 출력 결과는 장담할 수 없게된다. DWORD color; // 정점의 색깔 }; // 사용자 정점 구조체에 관한 정보를 나타내는 FVF(Flexible Vertext Format) 값 // 구..
D3D Tutorial 02: Vertices
D3D Tutorial 02: Vertices
2012.11.22#include "stdafx.h" LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 렌더링에 사용될 D3D 디바이스 LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 정점을 보관할 정점 버퍼 // 사용자 정점을 정의할 구조체 struct CUSTOMVERTEX { FLOAT x, y, z, rhw; // 정점의 변환된 좌표(rhw 값이 있으면 변환이 완료된 정점이다.) // RHW(reciprocal homogeneous W)는 동차 좌표계의 w값이며, 값이 있으면 변환이 완료된 정점을 말한다. // FVF 선언 순서에 위배되면 절대로 작동하지 않고, 출력 결..
D3D Tutorial 01: CreateDevice
D3D Tutorial 01: CreateDevice
2012.11.22#include "stdafx.h" LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 렌더링에 사용될 D3D 디바이스 /* Direct3D 초기화 */ HRESULT InitD3D(HWND hWnd) { // 디바이스를 생성하기 위한 D3D 객체 생성 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; // 생성 실패시 E_FAIL를 반환 D3DPRESENT_PARAMETERS d3dpp; // 디바이스 생성을 위한 구조체 // 반드시 ZeroMemory() 함수로 미리 구조체를 깨끗이 지워야 한다. Zero..