3D 그래픽스 1
Vertex → Triangle → Mesh → 3D Object
Vertex = 3D 공간의 점
Triangle = Vertex 3개로 구성된 면
Mesh = Vertex와 Triangle의 묶음

Mesh 기본 개념
3D 오브젝트의 형태를 표현하는 데이터 구조
Vertex
3D 공간의 한 점
3D 공간의 위치는 X, Y, Z 좌표로 표현
Vertex Position = (X, Y, Z)
Triangle
세 개의 Vertex로 만들어진 면
Triangle은 Vertex 배열의 0번, 1번, 2번 Vertex를 연결
- Vertices[0]
- Vertices[1]
- Vertices[2]
Index를 사용하는 이유
Vertex 값을 Triangle마다 반복해서 저장하지 않고 Index로 참조하면 같은 Vertex를 재사용할 수 있

Trianale의 연결 순서
- 두 Triangle은 같은 세 점을 사용하지만 연결 순서가 반대
- Winding Order
- 삼각형을 구성하는 Vertex를 어떤 순서로 연결했는지를 의미

MeshObject 구현
- Vertex 목록
- Triangle 목록

Triangle Mesh
MeshObject CreateTriangle()
{
MeshObject mesh;
mesh.AddVertex(0.0f, 0.0f, 0.0f); // 0
mesh.AddVertex(100.0f, 0.0f, 0.0f); // 1
mesh.AddVertex(0.0f, 100.0f, 0.0f); // 2
mesh.AddTriangle(0, 1, 2);
return mesh;
}
Quad Mesh
MeshObject CreateQuad()
{
MeshObject mesh;
mesh.AddVertex(0.0f, 0.0f, 0.0f); // 0
mesh.AddVertex(100.0f, 0.0f, 0.0f); // 1
mesh.AddVertex(100.0f, 100.0f, 0.0f); // 2
mesh.AddVertex(0.0f, 100.0f, 0.0f); // 3
mesh.AddTriangle(0, 1, 2);
mesh.AddTriangle(0, 2, 3);
return mesh;
}
Cube의 기본 구조
여섯 개의 사각형 면
- Face 6개
- Face 1개 = Triangle 2개
- Cube = Triangle 12개
Cube Vertex 배치
Cube의 크기를 Size라고 하고 절반 크기를 HalfSize라고 함
(-HalfSize, -HalfSize, -HalfSize)
( HalfSize, -HalfSize, -HalfSize)
( HalfSize, HalfSize, -HalfSize)
(-HalfSize, HalfSize, -HalfSize)
(-HalfSize, -HalfSize, HalfSize)
( HalfSize, -HalfSize, HalfSize)
( HalfSize, HalfSize, HalfSize)
(-HalfSize, HalfSize, HalfSize)
| 번호 | X | Y | Z | 의미 |
| V0 | − | − | − | 아래쪽 면의 한 모서리 |
| V1 | + | − | − | X 양의 방향으로 이동 |
| V2 | + | + | − | X와 Y 모두 양의 방향 |
| V3 | − | + | − | Y 양의 방향으로 이동 |
| V4 | − | − | + | V0의 바로 위 |
| V5 | + | − | + | V1의 바로 위 |
| V6 | + | + | + | V2의 바로 위 |
| V7 | − | + | + | V3의 바로 위 |
Cube 생성 함수
MeshObject CreateCube(float size)
{
MeshObject cube;
const float h = size * 0.5f;
cube.AddVertex(-h, -h, -h); // 0
cube.AddVertex( h, -h, -h); // 1
cube.AddVertex( h, h, -h); // 2
cube.AddVertex(-h, h, -h); // 3
cube.AddVertex(-h, -h, h); // 4
cube.AddVertex( h, -h, h); // 5
cube.AddVertex( h, h, h); // 6
cube.AddVertex(-h, h, h); // 7
// 아래쪽 면
cube.AddTriangle(0, 2, 1);
cube.AddTriangle(0, 3, 2);
// 위쪽 면
cube.AddTriangle(4, 5, 6);
cube.AddTriangle(4, 6, 7);
// 앞쪽 면
cube.AddTriangle(0, 1, 5);
cube.AddTriangle(0, 5, 4);
// 뒤쪽 면
cube.AddTriangle(3, 7, 6);
cube.AddTriangle(3, 6, 2);
// 왼쪽 면
cube.AddTriangle(0, 4, 7);
cube.AddTriangle(0, 7, 3);
// 오른쪽 면
cube.AddTriangle(1, 2, 6);
cube.AddTriangle(1, 6, 5);
return cube;
}
int main()
{
MeshObject cube = CreateCube(100.0f);
cube.PrintInfo();
return 0;
}
3D 그래픽스 2
Vertex는 위치만 가진 점이 아님
Position Vertex
Position → Vertex 위치 결정
Triangle Index → Vertex 세 개를 연결해 면 구성
Rendering Vertex
| 데이터 | 역할 |
| Position | Vertex의 3D 위치 |
| UV | Texture를 읽기 위한 좌표 |
| Normal | 표면이 향하는 방향 |
| Tangent | 표면 위의 기준 방향 |
| Color | Vertex 단위 색상 |
| Bone Index | Skeletal Mesh의 뼈 정보 |
| Bone Weight | 뼈의 영향력 |
Cube의 Vertex가 8개에서 24개가 되는 이유

Vector2
UV에서는 X, Y 대신 U, V라고 부르기도 함
- Vector2.X = U
- Vector2.Y = V
UV
- exture는 2D 이미지이고 Mesh는 3D 표면
- Texture의 어느 위치를 Mesh의 어느 부분에 붙일지 알려주는 좌표가 필요하다.
- Position = 3D 공간 좌표
- UV = 2D Texture 좌표
Quad의 UV

UV는 Vertex에 저장됨
- UV는 면 하나에 저장되는 것이 아니라 일반적으로 Vertex 속성으로 저장
- 그래픽스 파이프라인에서는 Vertex에 저장된 UV가 Triangle 내부에서 보관
- Vertex UV→ 각 Pixel의 UV 결정
- → Texture Sampling
- → Triangle 내부에서 보간
Texture Sampling
UV 좌표를 사용해 Texture의 색상이나 데이터를 읽는 과정
UV
→ 색상 또는 데이터 읽기
→ Material 계산에 사용
→ Texture 위치 선택
Tangent
표면 위를 따라가는 기준 방향 중 하나
Normal
→ 표면 바깥 방향
Tangent
→ 표면 위의 U 방향 기준
'TA' 카테고리의 다른 글
| TA 8강 / 라이팅 기초, 머티리얼 기초 (0) | 2026.07.23 |
|---|---|
| TA 6강 / 디자인 기초 1, 2 (0) | 2026.07.10 |
| TA 5강 / 기초 물리 (0) | 2026.07.02 |
| TA 4강 / 각도와 삼각함수 기초 (0) | 2026.07.02 |
| TA 3강 / 좌표계, Transform, 이동, 회전, 스케일 (0) | 2026.06.25 |