mini3d
Tutorial Rendering Perangkat Lunak 3D tidak memiliki optimasi kinerja, dan terutama menjelaskan kepada orang -orang cara menulis renderer perangkat lunak pipa tetap. Meskipun kode utama hanya 700 baris, Sparrow kecil dan memiliki semua organ internal.
【Readme dalam bahasa Inggris】
ciri
- File tunggal: Kode sumber hanya memiliki satu mini3d.c, dan satu file mengimplementasikan semuanya dan mudah dibaca.
- Kompilasi Independen: Tidak ada dependensi perpustakaan pihak ketiga, tidak ada direktori rekayasa yang kompleks.
- Model Standar: Model Koordinat D3D Standar, Sistem Tangan Kiri Ditambah Dunia / Tampilan / Proyeksi Tiga Matriks
- Menerapkan pemangkasan: tanam CVV sederhana
- Dukungan Tekstur: Dukungan Maksimum untuk Tekstur 1024 X 1024
- Cache Kedalaman: Gunakan cache kedalaman untuk menentukan gambar sebelum dan sesudah
- Peta Perspektif: Pemetaan Tekstur Perspektif dan Perspektif Warna Pengisian
- Komputasi tepi: perhitungan cakupan tepi poligon yang akurat
- Implementasi Diperampatkan: Mesin rendering hanya memiliki 700 baris, modulnya jelas, dan tulang punggungnya menonjol.
- Komentar terperinci: Komentar terperinci tentang kode utama
Kompilasi
- mingw: gcc -o3 mini3d.c -o mini3d.exe -lgdi32
- MSVC: Cl -o2 -Nologo mini3d.c
- Versi yang dikompilasi: https://github.com/skywind3000/mini3d/releases
Demo
Tekstur Isi: render_state_texture
Pengisian warna: render_state_color
Gambar wireframe: render_state_wireframe
Tingkatkan pencahayaan dan interpolasi linier kuadratik (tangkapan layar efek pencahayaan ditambahkan oleh teman ke mini3D)
Pekerjaan rumah dasar
- Tambahkan Kembali Penghapusan
- Tambahkan cahaya sederhana
- Memberikan lebih banyak mode rendering
- Menerapkan pembacaan tekstur perbedaan linier kuadratik
Pekerjaan Rumah Tingkat Lanjut
- Menyimpulkan dan membuktikan semua pengetahuan geometris yang digunakan dalam program ini
- Optimalkan kinerja komputasi vertex
- Optimalkan kinerja draw_scanline
- Memuat tekstur dari file BMP/TGA
- Muat skenario BSP dan implementasikan roaming
Penjelasan Prinsip
- Wei Yixiao: Bagaimana OpenGL dan DirectX mendapatkan lokasi Pixel ketika hanya simpul yang diketahui?
- Wei Yixiao: Bagaimana komputer mengakses kartu grafis?
Proyek terkait
- RenderHelp: Implementasi Soft Renderer yang ramping yang mendukung jalur pipa rendering yang dapat diprogram, lihat Pendahuluan untuk detailnya.
Sumbangan dipersilakan
Donasi Anda adalah penegasan terbesar dari tutorial ini. Donasi akan digunakan untuk meningkatkan dokumentasi tutorial dan legenda, serta membantu saya menulis tutorial yang lebih menarik.
Selamat datang untuk mengikuti
Blog: https://skywind.me/blog
Zhihu: https://www.zhihu.com/people/skywind3000