ここをクリックして、英語でreadmeを読むことができます
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))の距離(r)にあるすべてのポイント((x、y、z))を説明しています。
球体の画像:
3D平面は次のように表されます。
計画画像: 
シリンダーの場合:
シリンダー画像:シリンダー
画像をレンダリングするために、各ピクセルを通してカメラから光線を描きます。次に、シーン内のオブジェクトを使用してその交差点の稲妻を確認します。ここでは、それがどのように計算されるかを説明します。
球体の場合:

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スペースでカメラを導くために使用されます。q :3Dカメラの回転を表すために使用されるQuaternion。 Quaternionsは、補間と3D回転の問題を回避するのに役立ちます。 プロジェクトでは、キーボードキーを使用すると、カメラを制御し、シーンのビューを調整できます。各キーの仕組みと、カメラ管理に特定の手法を使用する理由の詳細な説明を以下に示します。
Wキー、A、S、D:カメラをさまざまな方向に移動するために使用されます。
これらのキーは、カメラの中心を変更します。これは、カメラがシーンを監視しているポイントです。カメラの中心を移動すると、カメラの回転せずにカメラの位置が変わります。
スペースキー:カメラを上げます。
シフトキー:カメラを下げます。
上(UP_K)および下(Down_K)上の矢印キー:カメラの垂直傾向を調整します。
左矢印キー(left_k)と右(右_k):カメラの水平方向の回転を調整します。
これらのキーは、カメラのオイラーの角度を変更します。これは、カメラが空間にどのように向いているかを決定する角度です。オイラーの角度は、カメラの傾斜と回転を簡単な方法で調整するために使用されます。
オイラーの角度
このプロジェクトは、 LinuxとMacOSの両方と互換性があるように設計されており、両方のオペレーティングシステムで問題なく機能するように特定の構成が実装されています。
キーなどのユーザーのグラフィックとエントリを処理するプロジェクトでは、各キーに関連付けられているコードがオペレーティングシステムによって異なる場合があります。これらの違いを処理するには:
例えば:
このプロジェクトでは、 Minilibx(MLX)を使用しています。これは、LinuxやMacOSなどのUNIX環境向けに特別に設計された2Dグラフィックプログラミング用のライトライブラリです。ただし、オペレーティングシステム間の違いにより、プロジェクトが両方のシステムで正しくコンパイルされるように、ライブラリとこれらのルートを適切に構成する必要があります。
オペレーティングシステムの検出:
ライブラリの構成:
アダプティブコンパイル:
このアプローチにより、プロジェクトは異なるオペレーティングシステム間で携帯できるだけでなく、各環境の特殊性と最適化され、互換性があることが保証されます。
プロジェクトが実際にどのように機能するかを説明するために、アクション中のプログラムのさまざまな側面と機能を示す一連のビデオを準備しました。これらのビデオでは:
ビデオは800x400の解像度でX4です
これらのクリップは、プログラムの使用方法と、パフォーマンスと視覚化の観点から期待できることの明確なビジョンを提供します。
プロジェクトに貢献したい場合:
ここ
ここ
◦Ffornes-:[email protected]にメールしてください
◦gmacias-:[email protected]にメールしてください