본문 바로가기

프로그래밍/공부44

[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.
[C++] std::Function C++에서 호출 가능한 모든 것을 포괄해서 나타내는 단어로 Callable이라는 단어를 사용한다. 대표적으로는 함수를 예로 들 수 있다. 하지만 C++에서는 ()를 붙여서 호출할 수 있는 모든 것을 Callable이라고 정의한다. 이해를 돕기 위해 아래의 코드를 확인해보자 #include struct A { void operator()(int a, int b) { std::cout 2023. 5. 25.
[Graphics] 3D 환경에서 회전 회전은 축을 기준으로 돈다. 3차원 환경에서는 각각 x, y, z의 세 축이 있다. 이 축들을 기준으로 물체가 회전을 하게 되는데 좌표계에 따라 다르지만 D3D에서는 순서대로 y축 기준의 회전을 Yaw, x축 기준의 회전을 Pitch, z축 기준의 회전을 Roll이라고 한다. 오일러 각 2차원 공간에서는 축이 2개이기 때문에 각 축은 회전에 대한 자유도가 있지만, 3차원에서는 얘기가 다르다. 어떤 순서로 회전을 하느냐에 따라서 같은 회전량이더라도 전혀 다른 결과물을 가지고 온다. 두 가지의 경우를 예로 들어보자. 우선 x축을 회전축으로 하여 +90도, 이후 y축을 회전축으로 하여 +90도를 회전한 결과이다. 그 다음은 y축을 회전축으로 하여 +90도, 이후 x축을 회전축으로 하여 +90도를 한 결과물이다.. 2023. 5. 16.