The teko Utah , awalnya diciptakan oleh Martin Newell, adalah objek yang mudah untuk menguji program grafis 3D.
Tugasnya adalah membuat gambar rangka baja dari teko dalam proyeksi perspektif. Untuk mendorong gagasan aplikasi kode sumber , penglihatan dan kontrol kamera dapat diisolasi dan dikecualikan dari penghitungan. Ini agar parameter dan file input dapat dimodifikasi dan kode digunakan kembali untuk menghasilkan beragam gambar, tetapi tidak perlu membuat utilitas lengkap yang menerima argumen baris perintah yang rumit atau semacamnya. Saldo "peretas" dicari.
ref. StackOverflow: Bagaimana cara Bezier Patch bekerja di Utah Teapot?
Jadi ada tiga subtugas di sini:
- baca-dalam data teko dalam format aslinya .
- membagi data tambalan menggunakan deCasteljau splitting atau metode lain. Metode lain menggunakan matriks basis Bezier dan mengevaluasi polinomial (referensi standar, seperti Foley dan van Dam, Newmann dan Sproull), atau metode basis Bernstein (yang masih di luar saya).
- memproyeksikan poin ke 2D (jika bahasa tidak mendukung 3D secara asli) dan menggambar garis besar setiap patch kecil seperti yang terlihat dari titik Eye yang pandangannya berpusat pada titik LookAt dan sumbu vertikal yang disejajarkan dengan sumbu vertikal teko (mis. gambar "tegak" dari tempat yang bagus).
Dengan asumsi bahwa membaca data teks line-berorientasi dari sebuah file sedikit kesulitan, tantangan ini benar-benar tentang mendapatkan tangan-on dengan Bi-Cubic Data Patch Bezier.
Karena tes normal sederhana untuk pemusnahan permukaan belakang tidak cukup (tambalan tidak semua berorientasi ke luar), tidak diperlukan penghapusan garis-tersembunyi atau -permukaan. Sebagai bingkai gambar, harus terlihat baik-baik saja dengan bagian belakangnya terlihat. Penampilannya dapat ditingkatkan dengan menyesuaikan lebar garis tergantung pada jarak dari mata, tetapi ini tidak sepenuhnya diperlukan (program saya sendiri tidak melakukan ini).
Ini adalah kode-golf dan rosetta-stone . Jawaban yang bersaing di golf harus mencakup hitungan seperti biasa. Tetapi pengiriman dalam bahasa yang tidak biasa sangat dianjurkan, meskipun tidak terlalu pendek.
Untuk penggemar kompleksitas Kolmogorov, ada dataset yang lebih ringkas di mana set lengkap dapat direkonstruksi dengan menambahkan rotasi dan mirroring patch. Dan dalam karya Jim Blinn, A Trip Down the Graphics Pipeline , ada metode generasi yang bahkan lebih ringkas dengan menggunakan fakta bahwa tambalan individual memiliki rotasi atau simetri lainnya. Seluruh badan (atau tutup) dapat dijelaskan oleh kurva Bezier tunggal yang diputar di sekitar sumbu y. Cerat dan gagang dapat dijelaskan oleh dua kurva profil mereka, dan kemudian memilih titik kontrol menengah untuk memperkirakan ekstrusi melingkar.
sumber
glutSolidTeapot
danglutWireTeapot
!glutWireTeapot
.Jawaban:
Memproses (java), 314 (237 tanpa kontrol kamera)
Tidak termasuk definisi array:
Definisi array data:
Versi yang lebih mudah dibaca:
Dan beberapa foto:
Versi lain dengan beberapa efek menarik:
sumber
stroke(-1)
lebih pendek satu byte daristroke(255)
Nota bene
Tidak sepenuhnya bermain golf, tetapi ini menggambarkan pendekatan yang berbeda dari subdivisi deCasteljau: mengevaluasi basis polinomial. Penggunaan mat.ps .
1112
Melucuti garis vertikal, dan mendiskon parameter, menghasilkan versi 1112 char ini. Penggunaan mat.ps .
sumber