본문 바로가기
반응형

3D Algorithm42

Manifold와 Nonmanifold 차이(Mesh Processing) Manifold와 NonmanifoldMesh processing에서 Manifold와 Nonmanifold는 메쉬의 토폴로지(Topology)에 관련된 용어로 사용됩니다. 토폴로지는 한글로 위상이라고 말하는데 Mesh의 vertex, face, edge 연결관계를 나타내며, 임의의 vertex에서 연결된 face들이나 edge들의 정보를 알 수 있도록 하는 게 위상 정보로 보시면 되겠습니다.  Manifold는 한글로 다양체라고 부르는데, 아래 그림과 같이 한 개의 edge가 두 개의 face를 공유하거나(좌측 그림), 한 개의 점에서 연결되어 있는 점들이 1개의 집합으로 이루어졌을 때(우측 그림) manifold라고 부릅니다. 반면에 Nonmanifold는 비다양체라 부르며 한 개의 edge가 3개 .. 2024. 1. 10.
3차원 삼각형 면적 계산 5가지 방법(좌표, 길이, 각도, 외적 이용) 삼각형 면적 계산 방법3차원에서 삼각형의 면적을 구하는 여러 가지 방법을 알려드리겠습니다. 첫 번째 방법은 삼각형의 밑변과 높이를 알았을 때 구하는 식입니다. 중고등학교 때 많이 배웠던 식입니다. 두 번째 방법은 삼각형의 두 변과 각을 알고 있을 때 구하는 식입니다. 이 식도 어렸을 때 많이 봤던 식입니다. 세 번째 방법은 세 변의 길이를 알고 있을 때 삼각형의 면적을 구하는 식입니다.위식을 풀어보면 아래와 같은 식이 됩니다. 네 번째 방법은 삼각형의 한 변과 두 각을 알고 있을 때 구하는 식입니다.마지막 다섯 번째 삼각형 면적을 구하는 방법은 외적을 이용한 방법입니다. 삼각형의 3점을 이용해서 두 백터를 만든 후 두 백터의 외적 길이의 절반이 삼각형의 면적에 해당합니다. 외적 길이가 0에 가까우면 두 .. 2023. 12. 26.
AABB OBB 차이와 의미 AABB(Axis Aligned Bounding Box), OBB(Oriented Bounding Box)AABB, OBB는 모두 3D 그래픽스 및 게임 프로그래밍 분야에서 주로 사용되는 Bounding Box 계산 기법입니다.  AABB는 축에 정렬된 바운딩 박스로, 3축 x(1,0,0), y(0,1,0), z(0,0,1)와 평행한 최소 크기의 상자를 object에 넣는다고 생각하시면 됩니다. 상자의 각 면이 세 축에 정렬되어 있기 때문에 "축에 정렬된"이라는 용어가 사용됩니다. 이 기법은 object에서 3축의 최대 최소만 계산하기 때문에, 계산이 간단하면서도 효과적인 충돌 감지를 위한 방법 중 하나로 사용됩니다. 두 AABB 간의 충돌을 감지하는 것은 각 축에 대해 겹침 여부를 확인함으로써 쉽게 수.. 2023. 12. 11.
행기준 열기준 행렬 개발자 주의점(Transform Matrix) 3차원 4x4 변환 행렬에서 Rotation과 Translation 정보를 접근할 수 있습니다. 참고로 대각행렬은 Scale 수치를 알 수 있습니다.( r00 r01 r02 t03 ) ( r10 r11 r12 t13 ) ( r20 r21 r22 t23 ) (   0    0    0    1   ) 이 형태는 행기준의 행렬이고 열기준이 되면 index를 transpose 해줘야 합니다. 이것을 우리말로 전치 행렬이라고 부릅니다. 전치를 하게 되면 아래와 같이 변하게 됩니다.( r00 r10 r20 0 ) ( r01 r11 r21 0 ) ( r02 r12 r22 0 ) ( t03 t13 t23 1 )이 행렬은 열기준 행렬이고 만약 Translation 정보를 접근하려면 4행의 값들을 접근해야 합니다. 이 .. 2023. 12. 5.
세 점을 지나는 원 중심 계산(Eigen Library 이용한 최소자승법) 2차원에서 세 점을 지나는 원의 중심을 Eigen 라이브러리를 이용해서 구하는 방법을 알려드리겠습니다. 우리가 일반적으로 알고 있는 원의 방정식은(x-a)^2 + (y-b)^2 = r^2이며, 이 식은 표준형이라고 합니다. 이 식을 전개해서 일반형으로 바꾸게 되면x^2 + y^2 + ax + by + c = 0 이 됩니다. 이때 원의 중심은 -a/2, -b/2가 됩니다. 이 일반형의 식을 이용해서 원의 중심을 구해보도록 하겠습니다. 일반형 식에서 2차원의 점들이 주어졌을 때, 우리가 구해야 할 미지수는 a, b, c 이므로 a, b, c들만 좌변에 있도록 식을 수정해 보면ax + by + c = -x^2 - y^2이러한 식이 됩니다. Eigen 라이브러리를 이용하여 위의 식을 풀기 위해서는 Ax = B .. 2023. 11. 28.
CCW(Counter Clockwise) 정의와 판별 알고리즘 CCW은 Counter Clockwise의 줄임말이며, 우리말로 반시계방향을 의미합니다. 아래의 그림을 봤을 때 우리는 간단히 반시계방향 회전이라고 판단할 수 있습니다.2차원에서 이미지를 정면으로 봤을 때 반시계방향이라고 말할 수 있고, 만약에 3차원에서 이미지 정면이 아닌 뒷면에서 봤을 때는 시계방향 회전이라고 말할 수 있습니다. 이렇게 3차원에서는 같은 데이터라도 어느 방향에서 봤느냐에 따라 시계방향인지 반시계 방향인지 달라질 수 있습니다. CCW 판별은 백터의 외적과 내적을 이용해서 쉽게 판별할 수 있습니다. 반시계 방향을 판별하기 위한 두 백터 a, b와 두 백터를 바라보는 view 백터가 있다고 할 때 a, b 백터가 반시계 방향이라면 오른손 법칙에 의해 외적은 위로 향하게 됩니다.이 외적과 보.. 2023. 11. 13.
Backface Culling 의미와 기본 원리 Backface Culling은 3D 그래픽스에서 자주 사용되는 기술로, Object의 후면(Back face)을 자동으로 숨기는 작업을 말합니다. 위의 이미지의 왼쪽이 후면을 그린 것이고 오른쪽이 후면을 삭제한 그림입니다. 후면은 일반적으로 사용자에게 보이지 않는 면이기 때문에 화면에 그리지 않음으로써 렌더링 성능을 높이기 위해 사용됩니다. 여기서 렌더링 성능을 높인다는 의미는 Object를 그릴 때 좀 더 높은 FPS(Frames Per Second)를 확보할 수 있다고 볼 수 있습니다. Backface Culling은 그래픽 라이브러리 openGL이나 direct X에서 기본적으로 지원해 주는 기능이지만 만약에 이 기능을 구현해야 한다면, Object의 앞면(Front face)과 후면(Back F.. 2023. 11. 8.
곡률 의미와 3D 개발 활용(Curvature) 곡률은 곡선, 곡면의 한 지점이 얼마나 휘어지는지를 나타냅니다. 2차원에서는 곡선의 한 지점을 원으로 근사하게 되면 곡률 k = 1/R이 됩니다. 여기서 R은 원의 반지름을 의미합니다. 곡률 값이 원의 반지름 역수가 되어 곡선이 직선에 가까우면 곡률이 0에 가깝게 되고, 곡률이 크면 원의 반지름 R이 작아져 원의 크기가 작아지게 됩니다. 3차원에서는 곡면의 한 점에서 접 평면(Tangent Plane)을 여러 방향에서 정의할 수 있기 때문에 한 개의 값으로 계산하기 힘듭니다. 그래서 3차원 곡면의 곡률은 주곡률(Principal Curvature)과 평균곡률(Mean Curvature)을 사용합니다. 주곡률은 곡면의 한 점에서 계산되는 여러 개의 곡률 값 중에 가장 큰 값과 가장 작은 값을 주곡률이라고 .. 2023. 11. 3.
벡터 내적 활용(개발자 관점) 벡터의 내적은 영어로 Inner Product, Dot Product라고 부르며 3차원에서 계산은1. a•b = a.x*b.x + a.y*b.y + a.z*b.z   2. a•b = |a||b|cosθ 두 가지 방식으로 계산할 수 있습니다. 주로 개발을 할 때 계산은 1 번식을 사용하고, 값의 예측은 a, b 두 벡터를 단위 벡터로 만든 후 2 번식의 cosθ로 할 수 있습니다. 벡터 a, b를 단위백터로 만들면 |a|=|b|=1로 볼 수 있고(벡터를 길이 1로 정규화시키기 때문), 내적의 값은 cosθ로 나오게 됩니다. a.x*b.x + a.y*b.y + a.z*b.z = cosθ cosθ 그래프는 2파이를 주기로 1 ~ -1 값을 갖는 그래프입니다. 그래서 두 벡터를 단위백터로 만든 후 내적을 하게 .. 2023. 10. 30.
반응형