您可以通過單擊此處閱讀英文讀數
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]