Sie können die Readme in Englisch lesen, indem Sie hier klicken
Minirt ist ein Projekt, das Sie in die faszinierende Welt von Raytracing einführt. Mit diesem Projekt lernen Sie, Bilder mithilfe grundlegender Raytracing -Techniken zu rendern. Entdecken Sie, wie realistische Bilder von Grund auf neu erstellt werden!
Hier sind einige Bilder mit Minirt :
![]() | ![]() |
|---|---|
![]() | ![]() |
Diese Bilder zeigen, was Sie mit dem Projekt erreichen können, und geben Ihnen eine Vorstellung davon, wie die endgültigen Ergebnisse aussehen werden!
Minirt ist ein Raytracing -Projekt, mit dem Sie:
Lesen Sie weiter, um weitere Informationen zum Konfigurieren und Verwenden von Minirt zu erhalten, einschließlich der Definition der Karte, der Kreuzungsformeln und der Steuerung der Kamera und der Tastatur.
Die Karte definiert die Elemente, die in Ihrem Bild angezeigt werden. Hier zeigen wir Ihnen, wie Sie jede Art von Element konfigurieren:
Hier sind ein Beispiel dafür, wie die Elemente auf der Karte definiert werden:
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)
Umweltlicht (a)
Licht (l)
Plan (PL)
Kugel (sp)
Zylinder (Cy)
Die Formel einer 3D -Kugel lautet:
[(x - h)^2 + (y - k)^2 + (z - l)^2 = r^2]
Wo:
Diese Formel beschreibt alle Punkte ((x, y, z)), die sich in einer Entfernung (R) des Zentrums ((H, K, l)) befinden.
Bild der Kugel:
Eine 3D -Ebene wird dargestellt als: [AX + durch + cz + d = 0] wobei ((a, b, c)) der normale Vektor zur Ebene ist und (d) der Abstand vom Ursprung ist.
Plan Bild: 
Für einen Zylinder:
Zylinderbild: Zylinder
Um ein Bild zu rendern, zeichnen wir einen Strahl von der Kamera durch jedes Pixel . Dann prüfen wir, ob dieser Kreuzungblitz mit einem Objekt in der Szene. Hier erklären wir, wie es berechnet wird:
Für eine Kugel:

Für ein 3D -Flugzeug:

Für einen Zylinder:

Sobald wir den Schnittpunkt gefunden haben, berechnen wir die endgültige Farbe des Pixels mit diesen Schritten:
Anfangsfarbe:
Berechnen Sie das Licht:
Schatten:
Letzte Farbe:
Dies führt zu einem realistischeren Bild und passt die Helligkeit und Farbe an, wie Licht mit Objekten in der Szene interagiert.

Im Projekt verwenden wir mehrere Datenstrukturen, um die Szeneninformationen und die Kamerakonfiguration zu verarbeiten. Hier erklären wir, wie sie sich organisieren:
t_info und t_data ) t_info : Diese Struktur hält Informationen über die Menge jedes Elementtyps in der Szene:
ambient_light : Menge an Umgebungslichtern.camera : Anzahl der Kameras.lights : Lichtermenge.planes : Anzahl der Pläne.spheres : Anzahl der Kugeln.cylinders : Anzahl der Zylinder. t_data : Diese Struktur enthält alle Informationen über das zu renderne Bild:
width und height : Bildabmessungen (breit und groß).info : t_info -Struktur beschreibt die Menge jedes Objekttyps in der Szene.line : Zählen Sie die verarbeiteten Linien.lights , planes , spheres , cylinders : Listen, die die Objekte in der Szene enthalten. Diese Listen speichern die Informationen von Lichtern, Plänen, Kugeln bzw. Zylinder.camera : Informationen zur Kamera.ambient_light : Informationen zu Umweltlicht.t_camera )Die Kamera ist dafür verantwortlich, die Perspektive zu definieren, aus der das Bild gerendert wird. Seine Struktur umfasst:
fov : Das Sichtfeld (FOV) der Kamera, das bestimmt, wie viel von der Kamera zu sehen ist. Ein höherer Wert bedeutet ein breiteres Sichtfeld.center : Ein Vektor, der die Position der Mitte der Kamera im Raum darstellt.euler : Ein Vektor, der die Winkeln von Euler enthält, mit der die Kamera im 3D -Raum leitet.q : Ein Quaternion, mit dem die 3D -Kamera -Rotation dargestellt wird. Quaternionen sind nützlich, um Probleme mit der Interpolation und der 3D -Rotation zu vermeiden. Im Projekt können die Tastaturtasten die Kamera gesteuert werden und die Sicht der Szene einstellen. Hier finden Sie eine detaillierte Erläuterung, wie jeder Schlüssel funktioniert und warum wir bestimmte Techniken für die Kameramanagement verwenden.
W Keys, A, S, D: Sie werden verwendet, um die Kamera in verschiedene Richtungen zu bewegen:
Diese Schlüssel ändern die Mitte der Kamera, wobei die Kamera die Szene beobachtet. Das Bewegen der Mitte der Kamera verändert die Position der Kamera im Raum, ohne sie zu drehen.
Raumschlüssel: Heben Sie die Kamera hoch.
Schaltschlüssel: Senken Sie die Kamera ab.
Pfeiltasten oben (UP_K) und unten (Down_K): Sie passen die vertikale Neigung der Kamera an:
Linke Pfeiltasten (links_k) und rechts (rechts_k): Sie stellen die horizontale Drehung der Kamera ein:
Diese Tasten verändern die Winkeln von Euler der Kamera, dh die Winkel, die bestimmen, wie die Kamera im Raum ausgerichtet ist. Eulers Winkel werden verwendet, um die Neigung und Drehung der Kamera auf einfache Weise anzupassen.
Euler -Winkel
Dieses Projekt ist so konzipiert, dass sie sowohl mit Linux als auch mit MacOS kompatibel sind, und es wurden bestimmte Konfigurationen implementiert, um sicherzustellen, dass es in beiden Betriebssystemen ohne Probleme funktioniert.
In den Projekten, die Grafiken und Einträge des Benutzers wie Schlüssel verarbeiten, ist es üblich, dass die Codes, die mit jedem Schlüssel zugeordnet sind, um je nach Betriebssystem zu variieren. Um diese Unterschiede zu bewältigen:
Zum Beispiel:
Das Projekt verwendet Minilibx (MLX) , eine Lichtbibliothek für 2D -Grafikprogramme, die speziell für UNIX -Umgebungen wie Linux und MacOS entwickelt wurde. Aufgrund der Unterschiede zwischen den Betriebssystemen ist jedoch erforderlich, die Bibliotheken und die Routen dieser ordnungsgemäß zu konfigurieren, damit das Projekt in beiden Systemen korrekt kompiliert wird.
Erkennung des Betriebssystems :
Bibliothekskonfiguration :
Adaptive Zusammenstellung :
Dieser Ansatz stellt sicher, dass das Projekt nicht nur zwischen verschiedenen Betriebssystemen tragbar ist, sondern auch mit den Besonderheiten jeder Umgebung optimiert und kompatibel ist.
Um zu veranschaulichen, wie das Projekt in der Praxis funktioniert, haben wir eine Reihe von Videos erstellt, die unterschiedliche Aspekte und Funktionen des Programms in Aktion zeigen. Diese Videos Cover:
Die Videos sind X4 bei einer Auflösung von 800 x 400
Diese Clips bieten Ihnen eine klare Vision, wie Sie das Programm verwenden und was Sie in Bezug auf Leistung und Visualisierung erwarten können.
Wenn Sie zum Projekt beitragen möchten:
HIER
HIER
◦ E-Mail fForRes-: [email protected]
◦ E-Mail an gmacias-: [email protected]