기본 도형 (수학)

Jaemyeong Lee·2025년 4월 2일

게임 서버1

목록 보기
215/220

🎯 목표

  • 도형들의 정의(구조체) 방식 이해
  • 도형의 수학적 의미기능적인 용도 파악
  • 추후 충돌 판정, 피킹 테스트, 디버깅 등에 활용할 수 있도록 구조화

🧩 Primitive3D 헤더 구성

파일 위치: Engine/99.Headers/Math/Primitive3D.h

#pragma once

도형은 하나의 클래스로 모으기보다 각 도형별로 구조체로 분리하여 선언됩니다.


🔹 1. Point3D - 점

using Point3D = Vec3;
  • 가장 기본 단위
  • Vec3(float x, y, z) 벡터로 3D 좌표 표현
  • 대부분의 도형이 Point3D들을 조합해서 만들어짐

🔹 2. Line3D - 선분

struct Line3D {
	Point3D start;
	Point3D end;

	float Length() { return Vec3::Distance(start, end); }
	float LengthSq() { return Vec3::DistanceSquared(start, end); }
};
  • 두 점(start, end)을 잇는 유한한 선
  • Length(): 거리 계산
  • LengthSq(): 제곱 거리 (루트 연산 생략, 빠름)

🔹 3. Ray3D - 광선

struct Ray3D {
	Point3D origin;
	Vec3 direction;

	void NormalizeDirection() { direction.Normalize(); }

	static Ray3D FromPoints(const Point3D& from, const Point3D& to) {
		return Ray3D{ from, to - from };
	}
};
  • 시작점(origin)과 방향(direction)을 갖는 무한한 선
  • 주로 Ray Picking, Ray-Object 충돌 판정, 광선 추적 등에 사용
  • NormalizeDirection()으로 방향을 정규화해서 사용
  • FromPoints()로 두 점으로부터 생성 가능

🔹 4. Sphere3D - 구

struct Sphere3D {
	Point3D position;
	float radius;
};
  • 중심점 + 반지름
  • 구 안의 모든 점은 중심으로부터 반지름 이내
  • 충돌 판정에서 연산이 매우 빠르고 자주 사용됨

🔹 5. AABB3D - 축 정렬 박스 (Axis-Aligned Bounding Box)

struct AABB3D {
	Point3D position;
	Vec3 size;

	static Vec3 GetMin(const AABB3D& aabb);
	static Vec3 GetMax(const AABB3D& aabb);
	static AABB3D FromMinMax(const Vec3& min, const Vec3& max);
};
  • 중심 좌표 + size (각 축의 절반 길이)
  • 축에 평행 (x, y, z 축과 일치)
  • 빠른 충돌 판정을 위해 많이 사용

🛠 유틸리티 함수

  • GetMin(), GetMax(): 좌표 최솟값과 최댓값 계산
  • FromMinMax(): 두 점(min/max)으로 AABB 생성

🔹 6. OBB3D - 방향 있는 박스 (Oriented Bounding Box)

struct OBB3D {
	Point3D position;
	Vec3 size;
	Matrix orientation;
};
  • AABB와 구조는 같지만, 회전(orientation) 이 포함됨
  • Matrix를 사용하여 회전 정보 저장
  • 더 정밀한 충돌 판정 가능하지만 연산은 더 무거움

🔹 7. Plane3D - 평면

struct Plane3D {
	Vec3 normal;
	float distance;
};
  • 법선벡터 + 원점으로부터의 거리로 표현
  • 다른 방식: 점 3개 / 법선 + 점 / 법선 + 거리
  • 주로 평면과의 교차, 반사, 거리 계산 등에 사용됨

🔹 8. Triangle3D - 삼각형

struct Triangle3D {
	union {
		struct {
			Point3D a;
			Point3D b;
			Point3D c;
		};
		Point3D points[3];
		float values[9];
	};
};
  • 꼭짓점 3개로 이루어진 도형
  • union으로 다양한 접근 방식 지원
    • a, b, c: 이름 기반 접근
    • points[]: 배열 접근
    • values[]: 메모리 순차 접근

삼각형은 메시(mesh)의 최소 단위이며, 모든 복잡한 형상도 삼각형으로 쪼개져 표현됩니다.


🔹 9. Interval3D - 수치 구간

struct Interval3D {
	float min;
	float max;
};
  • 하나의 축에서의 구간 표현
  • 예: 충돌 판정 시 프로젝션 비교 (SAT 방식에서 많이 사용됨)

📌 도형들의 실제 활용

도형활용 예시
Point3D좌표 표현, 삼각형의 꼭짓점
Line3D거리 측정, 디버그 선
Ray3DPicking, 충돌, 광선 추적
Sphere3D단순 충돌 감지, 거리 기반 탐지
AABB3D빠른 박스 충돌 테스트, 공간 분할
OBB3D회전 가능한 정확한 충돌
Plane3D반사, 거리 판정, 절단
Triangle3D메시 기반 연산, 렌더링, 지형 처리
Interval3D투영 기반 충돌 연산

profile
李家네_공부방

0개의 댓글