본문 바로가기

전체 글84

[DirectX3D] 광원 효과 - (1) 현실 세계에서 빛은 뻗어온 빛이 매질에 따라 색을 흡수하고 반사하여 우리 눈에 들어온 색을 띈다. 여기서 빛이 강하면 더욱 명도를 띄게 되고 빛이 적다면 명도가 낮아진다. 하지만 컴퓨터 그래픽에서는 빛의 반사에 따른 색과 명도를 계산할 필요가 없다. 왜냐하면 컴퓨터 세상에서 빛은 각 정점 혹은 픽셀이 가지고 있는 값에 따라 스스로 색을 띄기 때문이다. 광원 효과를 표현하는 것도 비슷하다. 우선 폴리곤을 형성하는 정점을 이용해 법선을 매핑해야 한다. 법선이라 함은 해당 정점이 바라보고 있는 방향을 가지는 벡터를 의미한다. 법선은 해당 정점 혹은 폴리곤에 부딪히는 벡터에 대해 반사각을 구할 때 사용한다. 비슷한 원리로 법선을 통해 광원이 들어오는 각도와 법선 사이의 각도를 계산해서 빛이 얼마나 들어오고 있는.. 2023. 6. 8.
[DirectX3D] 3차원 공간의 충돌 (1) - 점(마우스 포인터)과 오브젝트 2차원 공간에서의 충돌은 일반적으로 점과 면, 면과 면의 충돌이다. 면은 사각형과 원으로 나뉘며, 사각형은 회전값 변화 여부에 따라 AABB와 OBB로 나뉜다. https://eunsikk.tistory.com/22 [Game] 충돌 특정 오브젝트가 다른 오브젝트와 충돌을 했을 때, 이를 어떻게 확인하면 좋을까? 우선 단순하게는 해당 객체의 좌표가 다른 객체의 좌표와 겹쳐졌을 때 반응을 일으키면 된다. 충돌을 판정하는 eunsikk.tistory.com https://eunsikk.tistory.com/23 [Game] 충돌 (2) 객체의 축이 평행한 경우의 충돌은 단순하게 구현할 수 있다. 만약, 회전을 통해 객체의 축이 평행하지 않은 경우에는 어떻게 구현을 해야 할까? OBB 회전을 하게 되면 두 객.. 2023. 5. 31.
[Data Structure] 해시 테이블(Hash Table) 리스트 기반의 이진 탐색 트리의 경우, 특정 데이터의 검색의 시간복잡도는 O(logn)이다. 매 탐색에서 전체 데이터를 절반으로 나눠서 검색을 행하기 때문이다. 하지만 우리는 여기서 아쉬움을 느낀다. 배열의 경우 주소인 이름으로 접근해서 인덱스로 주소를 계산해서 접근하기 때문에, 임의 접근이 가능하면서 상수의 시간복잡도를 가진다. 우리는 이 장점을 활용할 방법이 없을까? 답은 바로 해시 테이블에 있다. 해시 테이블이 무엇인지 알기 위해 우선 해시에 대한 정의를 알아야 한다. 단어의 뜻을 찾아보면 다음과 같은 문장들을 확인할 수 있다. If you make a hash of a job or task, you do it very bably. Hash is a dish made from meat cut int.. 2023. 5. 29.
[C++] std::Function C++에서 호출 가능한 모든 것을 포괄해서 나타내는 단어로 Callable이라는 단어를 사용한다. 대표적으로는 함수를 예로 들 수 있다. 하지만 C++에서는 ()를 붙여서 호출할 수 있는 모든 것을 Callable이라고 정의한다. 이해를 돕기 위해 아래의 코드를 확인해보자 #include struct A { void operator()(int a, int b) { std::cout 2023. 5. 25.