여기를 클릭하여 영어로 읽기를 읽을 수 있습니다.
Minirt 는 매혹적인 Raytracing의 세계를 소개하는 프로젝트입니다. 이 프로젝트를 통해 기본 광선 트레이싱 기술을 사용하여 컴퓨터에서 생성 한 이미지를 렌더링하는 법을 배웁니다. 현실적인 이미지가 처음부터 어떻게 생성되는지 알아보십시오!
다음은 미니어링 으로 렌더링하는 몇 가지 이미지입니다.
![]() | ![]() |
|---|---|
![]() | ![]() |
이 이미지는 프로젝트로 달성 할 수있는 것을 보여주고 최종 결과가 어떻게 보이는지에 대한 아이디어를 제공합니다!
미니어트는 다음을 허용하는 광선 프로젝트입니다.
맵 정의, 교차 공식 및 카메라 및 키보드를 제어하는 방법을 포함하여 마이어링을 구성하고 사용하는 방법에 대한 자세한 내용을 계속 읽으십시오.
지도는 이미지에 나타날 요소를 정의합니다. 여기에서는 각 유형의 요소를 구성하는 방법을 보여줍니다.
다음은 맵에서 요소가 어떻게 정의되는지에 대한 예입니다.
A 0.3 255,255,255 (Luz de ambiente: intensidad, color)
C 0,1,-10 0,0,1 70 (Cámara: posición, vector de dirección, FOV)
L 0,10,-10 0.7 255,255,255 (Luz: posición, intensidad, color)
pl 0,0,0 0,1,0 100,100,100 (Plano: posición, vector normal, color)
sp 0,0,0 5 255,0,10 (Esfera: posición, radio, color)
cy 4,0,0 1,1,0 4 6 10,0,255 (Cilindro: posición, radio, altura, color)
카메라 (C)
환경 조명 (a)
빛 (L)
계획 (PL)
구 (SP)
실린더 (CY)
3D 구의 공식은 다음과 같습니다.
[(x -h)^2 + (y -k)^2 + (z -l)^2 = r^2]
어디:
이 공식은 중심 ((h, k, l))의 거리 (r)에있는 모든 지점 ((x, y, z))를 설명합니다.
구의 이미지 :
3D 평면은 [AX + BY + CZ + D = 0]으로 표시됩니다.
이미지 계획 : 
실린더의 경우 :
실린더 이미지 : 실린더
이미지를 렌더링하기 위해 각 픽셀 을 통해 카메라에서 광선을 그립니다. 그런 다음 장면의 물체와 교차로 번개가 있는지 확인합니다. 여기서 우리는 그것이 어떻게 계산되는지 설명합니다.
구체 :

3D 비행기의 경우 :

실린더의 경우 :

교차점을 찾으면 다음 단계로 픽셀의 최종 색상을 계산합니다.
초기 색상 :
빛 계산 :
그늘:
최종 색상 :
이로 인해보다 현실적인 이미지가 발생하여 빛이 장면의 물체와 상호 작용하는 방식에 따라 밝기와 색상을 조정합니다.

이 프로젝트에서는 여러 데이터 구조를 사용하여 장면 정보 및 카메라 구성을 처리합니다. 여기서 우리는 그들이 어떻게 구성되는지 설명합니다.
t_info 및 t_data ) t_info :이 구조는 장면의 각 요소 유형의 양에 대한 정보를 보관합니다.
ambient_light : 환경 조명의 양.camera : 카메라 수.lights : 조명의 양.planes : 계획 금액.spheres : 구의 수.cylinders : 실린더 수. t_data :이 구조에는 렌더링 할 이미지에 대한 모든 정보가 포함되어 있습니다.
width 와 height : 이미지 치수 (넓고 키).info : t_info 구조는 장면의 각 유형의 객체의 양을 자세히 설명합니다.line : 가공 라인을 계산하십시오.lights , planes , spheres , cylinders : 장면의 객체를 포함하는 목록. 이 목록은 각각 조명, 계획, 구체 및 실린더의 정보를 저장합니다.camera : 카메라에 대한 정보.ambient_light : 환경 조명에 대한 정보.t_camera )카메라는 이미지가 렌더링되는 관점을 정의 할 책임이 있습니다. 구조는 다음과 같습니다.
fov : 카메라의 비전 (FOV)은 카메라에서 얼마나 볼 수 있는지 결정합니다. 더 큰 가치는 더 넓은 비전 분야를 의미합니다.center : 공간에서 카메라 중앙의 위치를 나타내는 벡터.euler : 3D 공간에서 카메라를 안내하는 데 사용되는 Euler 각도를 포함하는 벡터.q : 3D 카메라 회전을 나타내는 데 사용되는 쿼터니언. Quaternions는 보간 및 3D 회전 문제를 피하는 데 유용합니다. 프로젝트에서 키보드 키를 사용하면 카메라를 제어하고 장면보기를 조정할 수 있습니다. 다음은 각 주요 작동 방식과 카메라 관리에 특정 기술을 사용하는 이유에 대한 자세한 설명입니다.
W 키, A, S, D : 카메라를 다른 방향으로 이동하는 데 사용됩니다.
이 키는 카메라의 중앙을 수정하는데, 이는 카메라가 장면을보고있는 지점입니다. 카메라의 중앙을 움직이면 카메라의 위치가 회전하지 않고 공간의 위치가 변경됩니다.
공간 키 : 카메라를 높이십시오.
시프트 키 : 카메라를 아래로 내립니다.
위 (UP_K) 이상 (Down_K) 위의 화살표 키 : 카메라의 수직 성향을 조정합니다.
왼쪽 화살표 키 (왼쪽_K) 및 오른쪽 (Right_K) : 카메라의 수평 회전을 조정합니다.
이 키는 카메라의 오일러 각도를 수정하는데, 이는 카메라가 공간에 방향을 어떻게 배향하는지 결정하는 각도입니다. Euler의 각도는 카메라의 성향과 회전을 간단한 방식으로 조정하는 데 사용됩니다.
오일러 각도
이 프로젝트는 Linux 및 MACOS 와 호환되도록 설계되었으며 두 운영 체제 모두 문제없이 작동하도록 특정 구성이 구현되었습니다.
키와 같이 사용자의 그래픽 및 항목을 처리하는 프로젝트에서는 운영 체제에 따라 각 키와 관련된 코드가 일반적입니다. 이러한 차이점을 처리하려면 :
예를 들어:
이 프로젝트는 Linux 및 MACOS와 같은 UNIX 환경을 위해 특별히 설계된 2D 그래픽 프로그래밍을위한 가벼운 라이브러리 인 MINILIBX (MINILIBX)를 사용합니다. 그러나 운영 체제 간의 차이로 인해 프로젝트가 두 시스템에서 올바르게 컴파일되도록 라이브러리와 이들의 경로를 올바르게 구성해야합니다.
운영 체제 탐지 :
라이브러리 구성 :
적응 형 컴파일 :
이 접근법은 프로젝트가 다른 운영 체제간에 휴대용이 가능할뿐만 아니라 각 환경의 특수성과 최적화되고 호환 될 수 있도록합니다.
프로젝트가 실제로 어떻게 작동하는지 설명하기 위해 프로그램의 다양한 측면과 기능을 보여주는 일련의 비디오를 준비했습니다. 이 비디오 커버 :
비디오는 800x400의 해상도에서 x4입니다
이 클립은 프로그램 사용 방법과 성능 및 시각화 측면에서 기대할 수있는 분명한 비전을 제공합니다.
프로젝트에 기여하려면 :
여기
여기
◦ 이메일 ffornes- : [email protected]
◦ 이메일 gmacias- : [email protected]