Anda dapat membaca readme dalam bahasa Inggris dengan mengklik di sini
Minirt adalah proyek yang memperkenalkan Anda pada dunia raytracing yang menarik. Dengan proyek ini, Anda akan belajar membuat gambar yang dihasilkan oleh komputer menggunakan teknik raytracing dasar. Temukan bagaimana gambar realistis dibuat dari awal!
Berikut adalah beberapa gambar yang dirender dengan minirt :
![]() | ![]() |
|---|---|
![]() | ![]() |
Gambar -gambar ini menunjukkan apa yang dapat Anda capai dengan proyek dan memberi Anda gambaran tentang bagaimana hasil akhir akan terlihat!
Minirt adalah proyek raytracing yang memungkinkan Anda:
Lanjutkan membaca untuk mendapatkan detail lebih lanjut tentang cara mengkonfigurasi dan menggunakan minirt , termasuk cara menentukan peta, rumus persimpangan, dan cara mengontrol kamera dan keyboard.
Peta mendefinisikan elemen yang akan muncul di gambar Anda. Di sini kami menunjukkan kepada Anda cara mengkonfigurasi setiap jenis elemen:
Berikut adalah contoh bagaimana elemen didefinisikan pada peta:
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)
Kamera (C)
Lingkungan Lingkungan (A)
Cahaya (l)
Plan (PL)
Sphere (SP)
Silinder (CY)
Formula bola 3D adalah:
[(x - h)^2 + (y - k)^2 + (z - l)^2 = r^2]
Di mana:
Formula ini menggambarkan semua titik ((x, y, z)) yang berada pada jarak (r) pusat ((h, k, l)).
Gambar bola:
Bidang 3D direpresentasikan sebagai: [AX + BY + CZ + D = 0] di mana ((a, b, c)) adalah vektor normal ke bidang dan (d) adalah jarak dari asal.
Rencana Gambar: 
Untuk silinder:
Gambar Silinder: Silinder
Untuk membuat gambar, kami menggambar sinar dari kamera melalui setiap piksel . Kemudian kami memeriksa apakah persimpangan petir dengan objek di tempat kejadian. Di sini kami menjelaskan bagaimana itu dihitung:
Untuk sebuah bola:

Untuk pesawat 3D:

Untuk silinder:

Setelah kami menemukan titik persimpangan, kami menghitung warna akhir piksel dengan langkah -langkah ini:
Warna Awal:
Hitung cahaya:
Naungan:
Warna terakhir:
Ini menghasilkan gambar yang lebih realistis, menyesuaikan kecerahan dan warna sesuai dengan bagaimana cahaya berinteraksi dengan objek dalam adegan.

Dalam proyek, kami menggunakan beberapa struktur data untuk menangani informasi adegan dan konfigurasi kamera. Di sini kami menjelaskan bagaimana mereka mengatur:
t_info dan t_data ) t_info : Struktur ini menyimpan informasi tentang jumlah masing -masing jenis elemen dalam adegan:
ambient_light : Jumlah lampu lingkungan.camera : Jumlah kamera.lights : Jumlah lampu.planes : Jumlah rencana.spheres : Jumlah bola.cylinders : Jumlah silinder. t_data : Struktur ini berisi semua informasi tentang gambar yang akan diterjemahkan:
width dan height : Dimensi gambar (lebar dan tinggi).info : Struktur t_info merinci jumlah masing -masing jenis objek dalam adegan.line : Hitung garis yang diproses.lights , planes , spheres , cylinders : Daftar yang berisi objek di tempat kejadian. Daftar ini menyimpan informasi lampu, rencana, bola, dan silinder, masing -masing.camera : Informasi tentang kamera.ambient_light : Informasi tentang cahaya lingkungan.t_camera )Kamera bertanggung jawab untuk mendefinisikan perspektif dari mana gambar diberikan. Strukturnya meliputi:
fov : Bidang penglihatan (FOV) kamera, yang menentukan berapa banyak yang dapat dilihat dari kamera. Nilai yang lebih besar berarti bidang visi yang lebih luas.center : Vektor yang mewakili posisi pusat kamera di ruang angkasa.euler : Vektor yang berisi sudut Euler, yang digunakan untuk memandu kamera di ruang 3D.q : Kuarter yang digunakan untuk mewakili rotasi kamera 3D. Kuarter berguna untuk menghindari masalah dengan interpolasi dan rotasi 3D. Dalam proyek, tombol keyboard memungkinkan kamera dikontrol dan menyesuaikan tampilan pemandangan. Berikut adalah penjelasan terperinci tentang bagaimana setiap kunci bekerja dan mengapa kami menggunakan teknik tertentu untuk manajemen kamera.
W kunci, a, s, d: mereka digunakan untuk memindahkan kamera ke arah yang berbeda:
Kunci -tombol ini memodifikasi pusat kamera, yang merupakan titik dari mana kamera menonton pemandangan. Memindahkan pusat kamera mengubah posisi kamera di ruang angkasa tanpa memutarnya.
Kunci Ruang: Tinggikan kamera ke atas.
Kunci Shift: Turunkan kamera ke bawah.
Kunci panah di atas (up_k) dan di bawah (down_k): Mereka menyesuaikan kecenderungan vertikal kamera:
Kunci panah kiri (kiri_k) dan kanan (kanan_k): Mereka menyesuaikan rotasi horizontal kamera:
Kunci -tombol ini memodifikasi sudut kamera Euler , yang merupakan sudut yang menentukan bagaimana kamera berorientasi pada ruang. Sudut Euler digunakan untuk menyesuaikan kecenderungan dan rotasi kamera dengan cara yang sederhana.
Sudut Euler
Proyek ini dirancang untuk kompatibel dengan Linux dan MacOS , dan konfigurasi spesifik telah diimplementasikan untuk memastikan bahwa ia bekerja tanpa masalah di kedua sistem operasi.
Dalam proyek yang menangani grafik dan entri pengguna, seperti kunci, adalah umum untuk kode yang terkait dengan masing -masing kunci bervariasi sesuai dengan sistem operasi. Untuk menangani perbedaan -perbedaan ini:
Misalnya:
Proyek ini menggunakan Minilibx (MLX) , yang merupakan perpustakaan ringan untuk pemrograman grafis 2D, dirancang khusus untuk lingkungan UNIX seperti Linux dan MacOS. Namun, karena perbedaan antara sistem operasi, perlu untuk mengkonfigurasi perpustakaan dan rute dengan benar sehingga proyek dikompilasi dengan benar di kedua sistem.
Deteksi sistem operasi :
Konfigurasi Perpustakaan :
Kompilasi Adaptif :
Pendekatan ini memastikan bahwa proyek ini tidak hanya portabel antara sistem operasi yang berbeda, tetapi juga tetap dioptimalkan dan kompatibel dengan kekhasan setiap lingkungan.
Untuk mengilustrasikan cara kerja proyek dalam praktiknya, kami telah menyiapkan serangkaian video yang menunjukkan berbagai aspek dan fungsionalitas program dalam aksi. Video -video ini mencakup:
Video X4 pada resolusi 800x400
Klip ini akan memberi Anda visi yang jelas tentang cara menggunakan program dan apa yang dapat Anda harapkan dalam hal kinerja dan visualisasi.
Jika Anda ingin berkontribusi pada proyek:
DI SINI
DI SINI
◦ Email ffornes-: [email protected]
◦ Email gmacias-: [email protected]