분류 전체보기
-
Luna의 DX11책은 절판됨, 코드가 현재 호환이 안됨(오래돼서) Visual Studio 프로젝트 생성시 템플릿에 DirectX라고 입력하면 DirectX 11, DirectX 12 등의 템플릿이 나옴 이 템플릿 역시 공부하기에 좋은 코드는 아님. 예제의 구조 main.cpp 예제 코드에서 main 함수는 오직 초기화와 실행 기능만 있음. 나중에 실제 프로그램을 만들때는 win main을 사용할 가능성이 높음. 그러나 대부분 게임 프로그래밍을 하면 그건 엔진에서 처리해주는 부분이기 때문에 윈도우즈 프로그래밍에 집중할 것은 아님. #include #include #include #include "ExampleApp.h" using namespace std; // main()은 앱을 초기화하고 실행시키는..
D3D 시작 [2/4], [3/4] - 예제 프레임워크, 초기화Luna의 DX11책은 절판됨, 코드가 현재 호환이 안됨(오래돼서) Visual Studio 프로젝트 생성시 템플릿에 DirectX라고 입력하면 DirectX 11, DirectX 12 등의 템플릿이 나옴 이 템플릿 역시 공부하기에 좋은 코드는 아님. 예제의 구조 main.cpp 예제 코드에서 main 함수는 오직 초기화와 실행 기능만 있음. 나중에 실제 프로그램을 만들때는 win main을 사용할 가능성이 높음. 그러나 대부분 게임 프로그래밍을 하면 그건 엔진에서 처리해주는 부분이기 때문에 윈도우즈 프로그래밍에 집중할 것은 아님. #include #include #include #include "ExampleApp.h" using namespace std; // main()은 앱을 초기화하고 실행시키는..
2023.11.26 -
Graphics APIs DirectX?: 그래픽스 드라이버를 프로그래머가 더 쉽게 사용할 수 있도록 만들어 놓은 것. Nvidia 그래픽카드, AMD 그래픽카드, 인텔 그래픽카드, 기타 모바일 칩 GPU등 각각의 GPU에 대해 서로 다른 그래픽 드라이버를 프로그래머가 모두 알아야 되는가? -> 알아야 한다면 너무 힘들다. DirectX, OpenGL같은 인터페이스만 알면 되게 만든것. DirectX DirectX에는 다양한 것들이 포함되어 있는데 보통 그래픽스에서 얘기하는 DirectX는 Direct3D. 공부 방법 DX API 사용법 앞에서 공부한 개념들 연결 예제 구조가 조금 더 복잡 실시간 렌더링 알고리즘 쉐이더 프로그래밍이 중요 창의성 발휘
D3D 시작 [1/4] - Direct3D 개요Graphics APIs DirectX?: 그래픽스 드라이버를 프로그래머가 더 쉽게 사용할 수 있도록 만들어 놓은 것. Nvidia 그래픽카드, AMD 그래픽카드, 인텔 그래픽카드, 기타 모바일 칩 GPU등 각각의 GPU에 대해 서로 다른 그래픽 드라이버를 프로그래머가 모두 알아야 되는가? -> 알아야 한다면 너무 힘들다. DirectX, OpenGL같은 인터페이스만 알면 되게 만든것. DirectX DirectX에는 다양한 것들이 포함되어 있는데 보통 그래픽스에서 얘기하는 DirectX는 Direct3D. 공부 방법 DX API 사용법 앞에서 공부한 개념들 연결 예제 구조가 조금 더 복잡 실시간 렌더링 알고리즘 쉐이더 프로그래밍이 중요 창의성 발휘
2023.11.25 -
최근 나온 DirectX 예제를 보다보면 COM이라는 것을 자주 보게 될 것이다. ComPtr 은 COM object에서 사용하는 스마트 포인터라고 생각하면 된다. 우리가 DirectX API를 사용해 렌더링 하면, 우리가 직접적으로 렌더링을 하는게 아니라, Direct3D의 인터페이스를 통해 간접적으로 렌더링하는 것이다. 이때 우리가 편하게 프로그래밍할 수 있도록 제공하는 기능 중 하나이다. 스마트 포인터에서 포인터를 만들때는 make_shared, make_unique 등으로 만들었다. 그런 것 처럼 Mircrosoft::WRL::COMPtr device; 를 사용할때는 D3D11CreateDevice() 라는 함수를 이용해서 생성한다. 옵션이 굉장히 많은데 하나씩 보면서 천천히 익숙해지면 된다. 예..
COM (Component Object Model)최근 나온 DirectX 예제를 보다보면 COM이라는 것을 자주 보게 될 것이다. ComPtr 은 COM object에서 사용하는 스마트 포인터라고 생각하면 된다. 우리가 DirectX API를 사용해 렌더링 하면, 우리가 직접적으로 렌더링을 하는게 아니라, Direct3D의 인터페이스를 통해 간접적으로 렌더링하는 것이다. 이때 우리가 편하게 프로그래밍할 수 있도록 제공하는 기능 중 하나이다. 스마트 포인터에서 포인터를 만들때는 make_shared, make_unique 등으로 만들었다. 그런 것 처럼 Mircrosoft::WRL::COMPtr device; 를 사용할때는 D3D11CreateDevice() 라는 함수를 이용해서 생성한다. 옵션이 굉장히 많은데 하나씩 보면서 천천히 익숙해지면 된다. 예..
2023.11.25 -
Row-Major: DirectX, Maya, PBRT 에서 사용 Column-Major: 대부분의 학술적인 곳, opengl, Vulkan, HLSL에서 사용. 왜 불편하게 굳이 Column-Major를 사용하는가? -> 속도가 약간 더 빠르다고 한다. 더보기 direct3d - HLSL mul and D3DXMATRIX order mismatch - Stack Overflow HLSL mul and D3DXMATRIX order mismatch I'm trying to multiply the transformation matrix in shader with vectors directly without doing unnecessary transportation. According to HLSL's mu..
Row-Major order vs Column-Major orderRow-Major: DirectX, Maya, PBRT 에서 사용 Column-Major: 대부분의 학술적인 곳, opengl, Vulkan, HLSL에서 사용. 왜 불편하게 굳이 Column-Major를 사용하는가? -> 속도가 약간 더 빠르다고 한다. 더보기 direct3d - HLSL mul and D3DXMATRIX order mismatch - Stack Overflow HLSL mul and D3DXMATRIX order mismatch I'm trying to multiply the transformation matrix in shader with vectors directly without doing unnecessary transportation. According to HLSL's mu..
2023.11.23 -
VSOutput MyVertexShader(const VSInput vsInput) { VSOutput vsOutput; // 여기서 여러가지 변환 가능 // vsOutput.position = // RotateAboutX( // RotateAboutY(vsInput.position * constants.transformation.scale, // constants.transformation.rotationY), // constants.transformation.rotationX) + // constants.transformation.translation; // 마지막에 1.0f 추가 Vector4 point = Vector4(vsInput.position.x, vsInput.position.y, vsI..
조명(SimpleMath)VSOutput MyVertexShader(const VSInput vsInput) { VSOutput vsOutput; // 여기서 여러가지 변환 가능 // vsOutput.position = // RotateAboutX( // RotateAboutY(vsInput.position * constants.transformation.scale, // constants.transformation.rotationY), // constants.transformation.rotationX) + // constants.transformation.translation; // 마지막에 1.0f 추가 Vector4 point = Vector4(vsInput.position.x, vsInput.position.y, vsI..
2023.11.23 -
DirectXMath 를 직접 사용하기 보다는 directxtk/SimpleMath 를 통해서 간접적으로 DirectXMath를 사용하는 것을 권장. simple math는 directxMath 의 wrapper이다. 참고로 쉐이더에서는 수학연산을 코딩 하는 방식이 또 다르다. XMVECTOR vs XMFLOAT XMVECTOR SIMD 가속 사용 클래스 멤버로는 XMFLOAT2, 3, 4 사용 연산하기 전에 XMVECTOR로 변환 Type Usage Guidelines https://learn.microsoft.com/en-us/windows/win32/dxmath/pg-xnamath-getting-started#type-usage-guidelines 요약 1. XMVECTOR: 지역 또는 전역 변수 ..
DirectXMath(SimpleMath)DirectXMath 를 직접 사용하기 보다는 directxtk/SimpleMath 를 통해서 간접적으로 DirectXMath를 사용하는 것을 권장. simple math는 directxMath 의 wrapper이다. 참고로 쉐이더에서는 수학연산을 코딩 하는 방식이 또 다르다. XMVECTOR vs XMFLOAT XMVECTOR SIMD 가속 사용 클래스 멤버로는 XMFLOAT2, 3, 4 사용 연산하기 전에 XMVECTOR로 변환 Type Usage Guidelines https://learn.microsoft.com/en-us/windows/win32/dxmath/pg-xnamath-getting-started#type-usage-guidelines 요약 1. XMVECTOR: 지역 또는 전역 변수 ..
2023.11.22