您可以通过单击此处阅读英文读数
Minirt是一个向您介绍引人入胜的Raytracing世界的项目。在此项目中,您将学习使用基本的射线缩放技术来渲染计算机生成的图像。发现如何从头开始创建逼真的图像!
这是一些带有Minirt的图像:
![]() | ![]() |
|---|---|
![]() | ![]() |
这些图像显示了您可以通过项目实现的目标,并让您了解最终结果的外观!
Minirt是一个允许您的射线跟踪项目:
继续阅读以获取有关如何配置和使用Minirt的更多详细信息,包括如何定义地图,交叉配方以及如何控制相机和键盘。
该地图定义了您的图像中将出现的元素。在这里,我们向您展示如何配置每种类型的元素:
以下是地图上元素如何定义的示例:
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))处的所有点((x,y,z))。
球体的图像:
3D平面表示为:[AX + By + Cz + D = 0],其中((A,B,C))是平面的正常向量,(D)是距离原点的距离。
计划图像: 
对于圆柱体:
气缸图像:气缸
为了渲染图像,我们通过每个像素从相机绘制射线。然后,我们检查该相交是否与场景中的对象相交。在这里,我们解释了如何计算:
对于一个领域:

对于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 :包含Euler角度的向量,用于引导相机在3D空间中。q :用于表示3D摄像机旋转的四元组。四季度对于避免插值和3D旋转问题很有用。 在项目中,键盘键允许控制相机并调整场景的视图。这是对每个密钥的工作原理以及我们为何将某些技术用于相机管理的详细说明。
W Keys,A,S,D:它们用于向不同的方向移动相机:
这些钥匙修改了相机的中心,这是相机观看场景的点。移动相机的中心会改变相机在太空中的位置而不会旋转它。
太空键:将相机提升。
移动键:降低相机。
上方(UP_K)及以下(down_k)的箭头键:它们调整相机的垂直倾斜度:
左箭头键(left_k)和右(right_k):它们调整相机的水平旋转:
这些钥匙修改了相机的欧拉角,这是确定相机在太空中定向的角度。 Euler的角度用于以简单的方式调整相机的倾斜度和旋转。
欧拉角
该项目旨在与Linux和MacOS兼容,并且已经实现了特定的配置,以确保在两个操作系统中都没有问题。
在处理用户的图形和条目(例如密钥)的项目中,与每个密钥相关的代码以根据操作系统而变化是常见的。处理这些差异:
例如:
该项目使用Minilibx(MLX) ,这是一个用于2D图形编程的轻库,专门为Linux和MacOS等UNIX环境设计。但是,由于操作系统之间的差异,有必要正确配置库和这些路由,以便在两个系统中正确编译项目。
检测操作系统:
库配置:
自适应汇编:
这种方法可确保该项目不仅可以在不同的操作系统之间进行便携,还可以优化和与每个环境的特殊性兼容。
为了说明该项目在实践中的运作方式,我们准备了一系列视频,这些视频显示了该程序的不同方面和功能。这些视频涵盖:
视频为X4,分辨率为800x400
这些剪辑将为您提供有关如何使用该程序以及在性能和可视化方面可以期望的内容的清晰愿景。
如果您想为该项目做出贡献:
这里
这里
◦电子邮件ffornes-:[email protected]
◦电子邮件gmacias-:[email protected]