분류 전체보기(15)
-
[BOJ] 2116 - 주사위 쌓기 | C++
문제 분석 정해진 조건대로 주사위를 쌓아 주사위 탑의 한쪽 면의 합이 최대가 되는 값을 구하는 문제입니다. 주사위 탑을 쌓을 때 아래 주사위의 윗면 숫자와, 위 주사위의 아랫면 숫자가 같아야 한다는 제약 조건이 있습니다.얼핏 보면 DP스러워 보이기도 합니다만, 완전 탐색으로 해결할 수 있습니다. 단순화를 위해 주어진 모든 주사위가 그림과 같은 모양이라고 가정하겠습니다.맨 아래 주사위의 윗면 숫자를 1이라고 정하면 그 위 주사위의 아랫면 숫자는 자동으로 1로 정해집니다. 1의 맞은편 숫자가 6이므로 그 주사위의 윗면 숫자는 6으로 정해지게 되고, 그 다음 주사위의 숫자 역시 자연스럽게 정해지게 됩니다.즉 맨 아래 주사위의 윗면 숫자만 정하면 나머지 모든 주사위의 위, 아랫면 숫자가 자동으로 정해집니다. ..
2024.06.10 -
[BOJ] 28709 - 와일드카드 괄호 문자열 | C++
문제 28709번: 와일드카드 괄호 문자열첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'www.acmicpc.net 분석 괄호의 쌍이 맞도록 문자열을 처리하는 문제입니다.얼핏 보면 9012 - 괄호 와 같은 스택 문제처럼 보이기도 합니다만, '*' 문자를 '(', ')'로 이루어진 길이 0 이상의 문자열로 대체할 수 있다는 강력한 조건이 붙어 있습니다.원하는 길이의 문자열을 붙일 수도 있고, 심지어 붙이지 않을 수도 있기 때문에 '*' 문자열이 단 하나라도 존재한다면 항상 올바른 괄호 문자열로 만들 수도 있겠다는 생..
2024.06.09 -
[Computer Graphics with DirectX 12] 08. Shadow
08. Shadow 목표그림자 맵을 이용한 그림자 렌더링평행광에 대한 그림자 구현큐브 메쉬, 빌보드, 지형의 그림자 렌더링dd GitHub - SH4MDEL/DirectX12-ComputerGraphicsContribute to SH4MDEL/DirectX12-ComputerGraphics development by creating an account on GitHub.github.com 위 리포지토리에서 전체 소스코드를 확인하실 수 있습니다.이 프로젝트의 소스코드는 08. Shadow입니다.설계 그림자가 Shadow 구현 asdf class GameObjectvoid GameObject::Render(const ComPtr& commandList) const{ UpdateShaderVariable(..
2024.05.03 -
[Computer Graphics with DirectX 12] 07. Lighting
07. Lighting 목표퐁 모델을 이용한 지역 조명 구현평행광, 점광, 점적광 구현폴리곤 조명 처리를 위한 노말 벡터 계산빌보드 및 지형의 노말 벡터 계산이전까지 어떤 물체가 색을 표현하는 방식은 텍스처에 저장된 색을 uv 값에 따라 샘플링하여 그냥 화면에 출력하는 것이었습니다. 이는 현실 세계와는 괴리감이 있습니다.실제로는 물체의 색이 어떻든간에 빛이 없으면 그 물체의 색은 우리 눈에 들어오지 않습니다. 광원이 어떤 물체의 표면을 때리면 표면과의 적절한 상호작용을 통해 빛이 흡수되거나 정반사, 난반사되고 이러한 여러 과정을 거쳐 빛이 눈에 닿으면 비로소 그 물체의 색을 감지하는 것입니다. 또한 현실 세계에 존재하는 여러 물체, 이를테면 나무와 금속의 차이점에 대해 생각해 보면 단순히 색 하나로 어떤..
2024.05.03 -
[Computer Graphics with DirectX 12] 06. Tessellation
06. Tessellation 목표테셀레이션을 이용한 지형 세분화카메라의 거리에 따른 지형의 테셀레이션 계수 조절4차 베지에 곡면을 이용한 지형 렌더링GetHeight 함수 재구현 지형의 높이가 셰이더 단에서 결정됨에 따른 GetHeight 함수 재구현 기존의 지형은 높이 맵의 높이를 받아와 서로 연결하는 형태로 구현되었습니다.결과는 나쁘지 않았지만 높이의 변화가 선형으로 이뤄지므로 가까이서 관찰하면 분명 어색한 부분이 존재함을 확인할 수 있었습니다. 이는 높이 맵을 더욱 세분화하고 삼각형을 가까운 간격으로 연결하여 해결할 수 있습니다. 그러나 이러한 구현을 위해 많은 메모리와 연산을 필요로 합니다. 가령 0.1 간격으로 지형을 렌더링한다면 1 간격으로 렌더링 할 때에 비해 100배의 메모리가 필요할 것..
2024.04.29 -
[Computer Graphics with DirectX 12] 05. Instancing
05. Instancing 목표인스턴싱을 이용한 오브젝트 렌더링한 번의 렌더 명령으로 다수의 수풀 렌더링서로 다른 텍스처 리소스를 사용하는 수풀 역시 한 번의 렌더 명령으로 렌더링 이전 프로젝트에서 기하 셰이더를 이용해 빌보드를 렌더링 해 보았습니다. 괜찮은 결과가 나왔지만 빌보드의 개수가 조금만 많아져도 렉이 심해지고, 로딩 시간 역시 오래 걸렸습니다.이는 수 만 개 오브젝트를 생성하며 업로드 버퍼를 초기화하고, 이 오브젝트들에 매 프레임 일일히 렌더링 명령을 내리기 때문입니다. 이 오브젝트들은 월드 변환 행렬(그리고 텍스처)만 다를 뿐, 같은 기하구조를 가지고 있습니다. 따라서 분명 반복되는 렌더링 과정 속에 비효율적인 부분이 존재합니다. 프로젝트 5에서는 인스턴싱을 이용하여 한 번의 렌더 명령으로 ..
2024.04.25