Graphics/DX11 물방울책 연습문제 풀이
-
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 ->..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 8Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 21. 22:55
문제 상자를 와이어프레임 모드로 렌더링하라. 해결 따로 메서드를 만들어 그안에서 레스터라이저 스탯을 멤버변수에 할당할 것이다. 슬슬 패턴이 비슷해진다. 뭔가를 할당할때마다 구조체를 정의하고.. Create어쩌구를 호출하고.. 눈에보인다. D3D11_RASTERIZER_DESC는 변수가 많지만 이번 문제해결에 쓰이는 변수는 하나밖에없다. FillMode는 렌더링 방식에 대한 정보를 담고있다. D3D11_FILL_WIREFRAME이 와이어프레임모드. 기본값은 D3D11_FILL_SOLID이다. CullMode는 이번문제랑 관련은없지만 재미를위해서 한번 건드려봤다. D3D11_CULL_NONE은 후면 삼각형을 선별하지 않으며 D3D11_CULL_BACK은 선별을 하여 렌더링에서 제외시킨다. 그리고자 하는 도형..
-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 7Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 21. 17:49
문제 상자와 피라미드를 같이 배치해라. 단 상자의 정점과 피라미드의 정점을 하나의 정점 버퍼에 넣어야 하며 색인 또한 마찬가지이다. 그리고 서로 도형이 겹치지 않도록 세계 변환 행렬을 적절히 사용하도록 한다. 해결 우선 상자의 정점,색인과 피라미드의 정점, 색인을 정의해야 한다.(색인은 스샷 생략) 멤버 변수 m... VertexOffset, IndexCount, Indexoffset을 정의 및 할당했습니다. 이 변수들에 대한 자세한 설명은 나중에 나오는 DrawIndexed함수를 사용할 때 부가하도록 하겠다. 여기서는 정점의 총 개수와 인덱스의 총 개수를 구합니다. 이는 버퍼를 정의하는 D3 D11_BUFFER_DESC에서 ByteWidth변수에 값을 할당하기 위해 사용되는 변수이다. 구체적으로 vec..