목록Graphics API (38)
서의 공간
Camera view 행렬 구축 방법 카메라의 업벡터는 항상 (0, 1, 0) 카메라 위치는 외부에서 설정함.(월드기준 위치) 카메라가 바라보는 방향 벡터는 월드기준으로 표현되며, 공식은 // Calculate the rotation in radians. radians = mRotationY * 0.0174532925f; // Setup where the camera is looking by default. lookAt.x = sinf(radians) + mPositionX; lookAt.y = mPositionY; lookAt.z = cosf(radians) + mPositionZ; XMVECTOR lookAtVector = XMLoadFloat3(&lookAt); mViewMatrix = XMMatr..
이번 튜토리얼에서는 HLSL 및 C++를 사용해 DirectX 11에서 물을 구현하는 방법을 다룬다. 물 구현은 다양한 방법이 있으며 각각에는 장단점이 있다. 이 튜토리얼에서 다룰 방법은 반사적이고 굴절하는 물이다(reflective and refractive water). 가장 보기 좋은 기술 중 하나이지만 파도의 높이가 너무 크면 물의 가장자리에서 약간의 문제가 있다. 따라서 반사하고 굴절하는 물은 강, 연못 및 수영장과 같이 파도 높이가 작은 수역에 적합하다. 호수와 바다가 반고체 상태인 경우 이 기술을 확장시켜 사용할 수 있을 것이다. 먼저 반사하고 굴절하는 물 기술 적용을 용이하게 하는 간단한 씬을 만들 것이다. 씬에는 평평한 바닥과 물을 담을 수 있는 대리석 수조가 있다. 또한 돌기둥도 배치하..
이번 주제는 DirectX 11에서 HLSL을 사용해 3D 모델을 렌더링 하는 방법을 알아본다. 이전 튜토리얼 디퓨즈 라이팅 코드를 베이스로 하여 진행한다. 사실 이미 이전 튜토리얼에서 3D 모델을 렌더링 했었다. 다만 그 모델들이 그저 하나의 삼각형이거나 사각형이었기 때문에 우리가 원했던 입체적인 느낌의 모델은 아니었다. 앞서 기본 도형을 다루었기 때문에 이제는 좀 더 복잡한 모델을 렌더링 해볼 것이다. 가장 먼저 큐브를 렌더링 해보고 점차 복잡한 모델로 넘어가겠다. 3D 모델을 만들 수 있는 여러 가지 도구가 있다. 그중에 Maya와 3D Studio Max는 가장 많이 사용되는 3D 모델링 프로그램들이다. Blender는 오픈소스 3D 모델링 프로그램으로서 무료로 사용할 수 있다. 이 각각의 프로그..
이번 튜토리얼에서는 디퓨즈 라이팅(분산광 조명, diffuse lighting)과 DirectX 11을 사용해서 3D 객체를 비추는 방법을 다룬다. 이전 튜토리얼의 코드에서 시작하여 수정한다. 우리가 구현할 디퓨즈 라이팅 유형을 디렉셔널 라이팅(지향광 조명, directional lighting)이라고 한다. 디렉셔널 라이팅은 태양이 지구를 비추는 방식과 유사하다. 먼 거리에 있는 광원이 빛을 보내는 방향에 따라 모든 물체가 받는 빛의 양을 조절할 수 있으며, 광원의 거리가 아주 멀리 있으므로 모든 입사 광선이 서로 평행하다고 간주한다. 또한 앰비언트 라이팅(주변광 조명, ambient lighting)과는 달리 직접 닿지 않는 표면은 비추지 않는다. 앰비언트 라이팅은 곧 다루게 될 예정이다. 디렉셔널 ..
이 튜토리얼에서는 DirectX 11에서 텍스처링을 사용하는 방법을 설명한다. 텍스처링을 사용하면 사진과 기타 이미지를 다각형면에 적용하여 씬에 사실감을 더할 수 있다. 해당 튜토리얼에서는 다음 이미지를 사용한다. 필요한 경우 Convertio 웹사이트에서 이미지 파일의 형식을 변환하여 사용한다. 다음은 위 이미지를 이전 튜토리얼에서 그렸던 삼각형에 적용한 결과이다. 우리가 사용할 텍스처의 형식은 .tga 파일이다. 이 형식의 파일은 빨강, 초록, 파랑 및 알파 채널을 지원하는 일반적인 그래픽 형식이다. 일반적으로 모든 이미지 편집 소프트웨어를 사용하여 targa 파일을 만들고 편집할 수 있다. 코드를 시작하기 전에 텍스처 매핑이 어떻게 작동하는지 이해해야 한다. .tga 이미지의 픽셀을 다각형에 매핑하..
이번 튜토리얼에서는 DirectX 11에서 정점 및 픽셀 셰이더를 작성하는 방법에 대해 알아볼 것이다. 또한 DirectX 11에서 정점 및 인덱스 버퍼를 사용하는 방법을 소개한다. 이는 3D 그래픽을 렌더링 하기 위해 이해하고 활용해야 하는 가장 기본적인 개념이다. Vertex Buffers 첫 번째 개념은 정점 버퍼이다. 이 개념을 설명하기 위해 다음 구의 3D 모델을 예로 들어 살펴본다. 우리가 화면에서 바라보는 구의 이미지는 실제로 다음과 같이 수백 개의 삼각형으로 구성된다. 구 모델의 각 삼각형은 3개의 점으로 이루어 있고 이 점을 정점(꼭짓점)이라고 한다. 이러한 구 모델을 렌더링 하려면 구를 형성하는 모든 정점을 정점 버퍼라고 하는 특수한 데이터 배열에 넣어야 한다. 구 모델의 모든 점을 정..
이번 튜토리얼은 Direct3D를 초기화하고 종료하는 방법과 윈도우에 렌더링 하는 방법을 설명한다. 프레임워크 모든 Direct3D 시스템 기능을 처리 할 다른 클래스를 프레임워크에 추가한다. 이 클래스는 D3DClass라고 할 것이다. 다음은 업데이트된 프레임워크 다이어그램이다. 다이어그램을 살펴보면 D3DClass는 GraphicsClass 내부에 있다. 이제 GraphicsClass의 변경 사항을 살펴본다. GraphicsClass.h 첫 번째 변경 사항은 Windows.h 헤더 파일을 인클루드 하는 대신에 D3DClass.h를 인클루드 했다. 두 번째 변경 사항은 D3DClass 객체의 포인터를 GraphicsClass의 멤버 변수로 추가했다. #ifndef _GRAPHICSCLASS_H_ #de..
DirectX 11 프로그래밍을 시작하기 전에 간단한 코드 프레임워크를 구축할 것이다. 이 프레임워크는 기본 Windows 기능을 관리하고 DirectX 11 학습을 위해 체계적이고 가독성 좋은 코드로 쉽게 확장할 수 있는 방법을 제공한다. 이 튜토리얼의 목적은 DirectX 11의 다양한 기능을 시도하는 것이므로 프레임 워크를 가능한 가볍게 유지할 것이다. 결코 종합적인 풀 렌더링 엔진을 만드는 것이 아님을 알린다. DirectX 11을 확실히 이해했다면 어떻게 최신 그래픽 렌더링 엔진을 만들지 연구할 수 있게 될 것이다. 프레임워크 프레임 작업은 4개의 항목으로 시작한다. 1. 응용프로그램의 진입점(entry point)을 처리하는 WinMain 함수. 2. WinMain 함수 내에서 호출될 전체 응..
Visual Studio 2017 버전을 사용했다. 다음은 이 튜토리얼을 진행하기 위한 프로젝트의 설정이다. 특별히 어렵게 설정할 부분은 없으며 자신만의 다양한 설정도 문제없을 것이다. Visual Studio 2017을 열어 새 프로젝트 -> 빈 프로젝트를 통해 프로젝트를 만든다. 그 다음 프로젝트 설정에서 설정할 부분이다. 1. 프로젝트 설정 -> 링커 -> 시스템 -> 하위 시스템 -> 창(/SUBSYSTEM:WINDOWS)으로 설정한다. 2. 프로젝트 설정 -> 일반 -> 문자 집합 -> 유니코드 문자 집합 사용 마지막으로 프로젝트를 Debug, x64모드로 설정한다. 32비트 애플리케이션을 원한다면 x86을 선택하면 된다. 이로써 모든 준비는 끝났다. 다음 장에서 본격적으로 튜토리얼을 시작한다.
RasterTek - DirectX 10, DirectX 11, and DirectX 12 Tutorials 시간 되는 대로 하나씩 올릴 예정. 위 홈페이지에서 제공하는 튜토리얼과 상당수 다른 부분이 있다. Direct SDK를 사용하지 않으며 DirectX 11에서 오래되거나 개발 중지된 컴포넌트 대신 외부 라이브러리로 대체된다. 현재까지 대체되어 사용한 라이브러리는 다음과 같다. DirectXTex: 텍스처 관련 라이브러리 Assimp: 3D 모델링 관련 라이브러리 FMOD: 사운드 관련 라이브러리 다음 링크에서 모든 소스코드를 다운 받을 수 있다. Seoui/DirectX11_Rastertek (github.com)