다이렉트X
[Direct X] Constant Buffer(상수 버퍼) 란?
상수 버퍼(Constant buffer)는 정점 및 픽셀 셰이더에서 사용될 상수를 모아 놓은 버퍼이다. 상수 버퍼 사용을 위해 cpp 코드 영역에 상수 버퍼 타입의 구조체를 정의하고 셰이더에도 동일한 포맷으로 상수 버퍼 구조체를 정의. 그리고 시스템 메모리에서 구조체 변수 생성 및 값 설정 후 정점 혹은 픽셀 셰이더에 Set 시킨다. 값 설정 및 set은 보통 매 프레임 실행되는 Render() 함수에 적용한다. 그러면 이 Set 시킨 데이터를 설정한 셰이더에서 사용할 수 있다. 상수 버퍼를 사용하는 이유? 셰이더에서 매번 사용되는 상수, 하지만 cpp 파일에서 전달해주어야 한다고 가정할 때, 개별적으로 하나하나 값을 전달해 주는 것은 대역폭(bandwidth)이 크고 부담이 많이 된다고 한다. 따라서 ..

DirectX와 HLSL간의 행렬 순서와 연산
예제 프로그램의 셰이더 코드에서는 'World * View * Projection' 순으로 행렬연산을 수행하는게, 내 프로그램에서는 'Project * View * World' 순으로 연산해야 정상적인 결과가 나왔기 때문이다. 컴퓨터에서 다차원 배열로 행렬을 구성할 때, 행렬을 어떤 순서로 접근할 것인지에 대한 순서가 있다. DirectX에서는 행렬 순서가 row-major(행우선)이고, HLSL에서는 column-major(열우선)이다. 위와 같이 행렬을 접근하는 순서가 다르기 때문에, 사용하는 라이브러리에 명시된 순서를 확인하고 그에 맞게 연산을 하지 않으면 제대로 된 결과가 나오지 않는다. 서로간의 행렬 순서가 달랐기 때문에, DirectX에서는 'World * View * Projection' 순..

[DX11] 튜토리얼 2 - 삼각형 렌더링
우선적으로 봐야할게 ID3D11DeviceContext*에 대한 포인터 변수다 / 디바이스 컨텍스트란? 디스플레이 또는 프린터와 같은 디바이스의 그리기 특성에 대한 정보를 포함하는 Windows 데이터 구조다. 모든 그리기 호출은 선, 도형 및 텍스트를 그리기 위해 Windows API를 캡슐화하는 디바이스 컨텍스트 개체를 통해 수행된다. ID3D11DeviceContext* g_pImmediateContext = NULL; 아래는 InitDevice 함수에 해당하는 내 / 렌더 타겟 뷰 개념 참조 // 하나 이상의 렌더링 대상을 원자성으로 바인딩하고 깊이 스텐실 버퍼를 // 출력-병합 단계에 바인딩합니다. g_pImmediateContext->OMSetRenderTargets( 1, &g_pRender..

[DX11 물방울책] 챕터 7 - 광원
7.0 개념 왼쪽 동그라미는 광원이 꺼져있어서 2D처럼 보인다 그에 반해 오른쪽 동그라미는 광원과 그림자가 추가되었기 때문에 3D처럼 인식된다. 이 모델에선 광원이 다양한 색상을 비추기 위해 rgb 색상 중 임의의 밝기로 조절할 수 있다. 빛이 어떠한 물체와 충돌 시 그 빛은 흡수 후 반사 되고 그렇게 소멸된다. 로컬 광원은 밝기의 중점이 물체에 있고, 각기 다른 밝기를 가지고있고 다른 물체와 독립적이다. 글로벌 광원은 각 물체의 밝기를 고려할 뿐만 아니라 전체 씬의 존재하는 오브젝트의 반사되는 빛 또한 고려한다. 상대적으로 비용이 매우 비싸며 이를 보완하기 위해 계속해서 연구 중에 있다. 7.2 단일 벡터 면이라는건 하나의 물체가 바라보고 있는 방향을 뜻한다. 표면이라는건 땅으로부터 바라보고 있는 방향..
그래픽스 API 정의와 비교 분석
로우 레벨 그래픽스 API들(Vulkan, DirectX, Metal, WebGPU)은 GPU와 구조 모델이 비슷하다. GPU는 원래 고정적인 코드들을 가졌었으며 수정 또한 불가능에 가까워서 성능이 떨어졌다. 이를 극대화 시키기 위해서 드라이버라는걸 새로 개발했다. 호출 순서 API 초기화 : GPU와 통신하기 위해 틀대를 만듬. 에셋 로딩 : 렌더링에 필요한 데이터 (셰이더) 또는 GPU와 통신하기 위한 명령들. 에셋 업데이트 프레젠테이션 : 커맨드 버퍼를 커맨드 큐에 보낸 후 스왑체인을 활용해서 렌더링. 2 3 4 반복 (프로그램 종료할 때 까지) GPU가 작업이 끝날 때까지 대기하고 사용한 모든 포인터들을 해제하고 데이터를 초기화한다. 비교 분석 라이브러리 파일을 가져올 시 API를 사용하기 위해선..

DirectX 11 프레임워크 환경 설정하는 방법
SDK 다운로드 사이트 https://www.microsoft.com/ko-KR/download/details.aspx?id=6812 Download DirectX SDK from Official Microsoft Download Center 중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 네덜란드어독일어러시아어스웨덴어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)체코어포 www.microsoft.com https://github.com/jjuiddong/Introduction-to-3D-Game-Programming-With-DirectX11 GitHub - jjuiddong/Introduction-to-3D-Game-Programming-With-DirectX..