일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- AR 게임
- Ray Tracing in One Weekend
- ar game
- 레이 트레이싱
- AR 던지기 게임
- AR Foundation Throwing
- 평면에 물체 던지기
- ray tracing
- 렌더링
- AR Throwing Game
- Today
- Total
목록연구실 인턴/Ray Tracing (3)
요리조리

레이 트레이싱에서 이미지의 픽셀 색깔을 결정할 때는, 픽셀마다 레이(ray)를 쏘아 3차원 공간 상에서 해당 레이가 어떻게 물체들과 부딪혀 이동하는지 경로를 탐색한다. 이때, 레이는 3차원 공간 상에서 특정한 위치(origin)에서 출발하여 특정 방향(direction)으로 이동하는 반직선의 벡터이다. (말 그대로 현실의 광선 그 자체를 컴퓨터 상에서 구현한 것..!) 따라서 레이가 3차원 공간 상의 어떤 물체와 부딪히는지 확인하기 위해서 공간에 있는 모든 물체들과의 충돌 테스트(intersection test)를 수행해야 한다. 즉, 물체 객체들을 담은 배열이 있을 때, 그 배열의 요소(element)를 하나씩 방문해 레이와 해당 요소가 부딫치는지 아닌지를 확인하고, 부딪친다면 어느 시점(time)에서..

레이와의 충돌(Intersection) 구현하기 오브젝트 파일을 읽어서 메시(mesh) 객체를 생성하였다면 이제 레이(ray)와 메시의 충돌을 구현해야 한다. 우선, 메시를 구성하는 각 삼각형들과 레이와의 충돌(intersection) 테스트를 함수로 구현한 후, 메시 전체(삼각형들의 모임)과 레이와의 충돌 테스트를 구현한다. 레이와 삼각형의 충돌 테스트 (Ray-triangle Intersection Test) 레이와 삼각형이 충돌하는지 확인하기 앞서 삼각형을 포함하는 무한한 평면(plane)과 레이가 충돌하는지의 여부부터 확인하자. // edges Vec3 e1 = v1- v0; // v0v1 Vec3 e2 = v2- v0; // v0v2 // 1. Check whether the ray is par..

사용하는 c++ 함수: std::move std::vector static_cast assert 필요한 구조체, 클래스 정의하기 (Defining Structures and Classes) 메시 클래스를 정의하기 앞서, 메시 오브젝트를 구성하는 요소들(e.g., vertex, face)의 타입부터 정의하자. 요소들은 구조체를 이용하여 새로운 데이터타입으로 정의한다. struct Vertex { Vec3 position; Vec3 normal; } struct Face { int vertices[3]; int normals[3]; } 이제, Vertex와 Face 타입의 변수를 요소, 즉 속성(attribute)으로 갖는 메시 클래스를 정의하자. 이때, 이 속성들은 private 접근 제한자를 두었기 때문..