전체 글
-
Smart PointerC++ 2022. 7. 17. 23:18
변수선언에는 크게 정적할당과 동적할당으로 나뉩니다. 정적할당은 프로그램을 실행하기 전 미리 선언되어있는 변수를 컴파일러에게 알려준 후 메모리 공간을 확보하는 것입니다. 이렇게 할당된 변수들은 스택 메모리에 쌓이고요. 동적할당은 프로그램을 실행하는 중에 변수를 만드는겁니다. 정적할당과 달리 미리 확보된 공간도 없으며 프로그램 실행 도중에 확보해야 합니다. 이렇게 생기게된 변수는 힙 메모리에 쌓이게 됩니다. 힙 메모리는 마치 프로그래머의 도화지 같은 곳입니다. 프로그래머가 마음대로 메모리를 할당하고 데이터를 다룰 수 있죠. 하지만 그만큼의 책임도 따릅니다. 프로그램이 꺼지기 전에 delete함수를 통해 동적할당된 메모리 영역을 해제해줘야 하기 때문이죠. Smart Pointer는 delete과정이 없어도 수..
-
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 10Graphics/DX11 물방울책 연습문제 풀이 2021. 5. 26. 23:32
스텐실 버퍼는 후면버퍼의 특정 영역여 픽셀을 그려줄지 말지 결정하는 버퍼입니다. 그리고 후면 버퍼에 그릴지 말지를 판정하는 걸 스텐실 판정이라고 합니다. 스텐실 판정의 의사코드는 아래와 같습니다. if(StencilRef & StencilReadMask 연산자 Value & StencilReadMask) 픽셀 허용 else 픽셀 폐기 StencilRef는 OMSetDepthStencilState메서드 호출할때 프로그래머가 직접 지정할 수 있는 값입니다. StencilReadMask또한 구조체를 통해 프로그래머가 직접 지정할 수 있습니다. Value는 스텐실 버퍼에 있던 해당 픽셀의 값입니다. 스탠실버퍼를 정의하기 위해선 구조체 내용을 채워야합니다. 처음 본 사람이라면 한번에 이해하기 힘드니 여러번 보면 ..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 9Graphics/DX11 물방울책 연습문제 풀이 2021. 4. 28. 21:27
우선.. 말투 좀 고치겠습니다. ~이다는 저랑 너무 안 어울리도 어색해서.. 9장은 혼합을 주제로 다루고 있습니다. 원본픽셀과 대상 픽셀을 factor와 지정된 연산자를 이용해 적절히 계산하여 혼합 결과를 출력합니다. 여기서 원본 픽셀은 래스터화 된 ij번째 픽셀 색상을 가리키며 대상 픽셀은 후면 버퍼에 그려진 ij번째 픽셀 색상입니다. 잠시 저의 생각을 옮겨 적자면.. 저는 이 주제를 공부할때 한 가지 오해 때문에 많이 힘들어했습니다. 왜냐하면.. 당연히 alpha값이 0이면 아무것도 안보이고 1이면 잘 보이겠죠? 그리고 0과 1 사이면 반투명으로 보이겠죠? 근데 그게 아녔습니다. 알아서 반투명되는 건 줄 알았습니다.. 이때 필요한 게 혼합이고요. 문제 1 수면을 렌더링하기 전에 SampleMask를 ..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 8Graphics/DX11 물방울책 연습문제 풀이 2021. 4. 24. 14:40
문제 1 나무 상자 예제의 텍스처 좌표들과 좌표 지정 모드, 필터링 옵션들을 여러 가지로 변경하면서 실험해 보라. 해결 텍셀과 픽셀의 개념은 비슷하면서도 완전히 다른 용도로 쓰인다. 게임을 하다 보면 오브젝트의 텍스트 좌표가 항상 픽셀과 1:1대 응이 되는 건 아니다. 예를 들어 오브젝트를 축소하거나 확대한다면 텍스처가 뭉개지거나 늘리게 될 것이다. 텍스처에 필터링을 씌워서 텍스처가 변질되는 것을 어느 정도 막을 수 있는데 대표적으로 크게 3가지 점 필터링, 선형 필터링, 비등방 필터링으로 나뉜다. 점 필터링은 두 텍셀사이의 텍스처 좌표의 값을 상수 보간으로 구하는 방식이다. 가장 싼 비용이지만 그만큼 품질이 좋진 않다. 위 사진에서 나머지 필터링 방식과 비교해도 가장 좋지 않다는 걸 알 수 있다. 선형..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 7Graphics/DX11 물방울책 연습문제 풀이 2021. 4. 3. 14:03
문제 1 이번 장의 조명 예제를,지향 광원이 빨간빛만 방출하고 점광원은 녹색 빛만,점적 광원은 파란빛만 방출하도록 수정하라. 설명 및 해결 조명은 크게 3가지 종류로 나뉜다. 입사광이 거친 포면을 때린다고 가정할 때 빛은 그 표면에 의해 무작위 방향으로 반사될 것이다. 이를 분산 반사라고 하며 반사된 빛을 분 산광이라고 한다. DirectX에서는 무작위로 반사되는 빛을 일 정도록 구현하기 때문에 플레이어의 시점이 어디든 눈에 보이는 빛의 양은 항상 일정하다. 주변 광은 빛이 사방으로 반사되어 물체의 모든 면을 비추는 빛이다. 예를 들어 집에 있는 컵을 향해 빛을 비춘다고 해서 반대쪽 면이 깜깜해지진 않다. 반영 광은 물체의 매끄러움을 나타내는 빛이다. 반영 광은 원뿔 형태로 반사되기 때문에 일부 각도에서..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 12Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 24. 21:49
문제 a) 입력 배치 서술 구조체들의 순서가 반드시 정점 구조체 성분들의 순서와 일치해야 할까? b) 정점 셰이더 구조체의 성분 순서가 c++ 정점 구조체 성분 순서와 일치해야 할까? 해결 a) 우선 구조체 배열의 순서를 바꿔도 정상적으로 작동할까? 에 대한 답을 듣기 전에 구조체에 어떤 정보가 담겨있는지 먼저 살펴보자. 여기서 우리가 눈여겨봐야 할것은 AlignedByteOffset이다. Vertex 구조체 변수를 가리키는 건 인덱스가 아닌 AlignedByteOffset변수이기 때문에 배열 순서가 바뀐다고 해서 변하는 게 없다. 즉 배열 원소 순서와 구조체 변수는 관계가 없으며 영향을 주는 변수가 따로 존재한다. 고로 순서를 바꿔도 잘 작동한다. b) 정점 셰이더 구조체는 뒤에 의미소가 붙어있다. 그..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 10Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 23. 21:49
문제 정점 구조체에서 128비트 색상대신 32비트 색상을 사용하라. 해결 input element desc 구조체배열의 내용을 바꾸도록 한다. 그리고 vertex의 color변수도 xmcolor로 바꿔주도록 한다. 뭔가 색깔이 많이 바뀌었다. 메모리 소비량을 줄였을뿐인데 이렇게 색이 변질된다면 모처럼 바꾼 의미가 없다. 원인을 알아보자. 사각뿔을 기준으로 보았을 때 빨간색이 파란색으로 바뀌었다. 분명 코드내에서는 Red로 값을 넣었는데도 불구하고 말이다. 이는 XMCOLOR가 ARGB가아닌 ABGR방식으로 값을 저장하기 때문인데 nampspace Colors의 변수들은 ARGB형태로 값이 저장되어 있었기 때문이다. 즉 r(빨강)변수값이 b(파랑)으로 들어가기 때문에 색이 변질된것이다. a : 255 ->..