Untuk pemrograman ini, saya mengandalkan library Numpy STL yang dapat membuat model 3D menggunakan array Numpy yang “sederhana”. Show Mengapa saya melakukannyaSaya adalah penggemar Pencetakan 3D, jadi saya membuat tantangan untuk menggunakan pustaka ini untuk membuat model 3D dari foto yang, jika dicetak dalam warna putih tembus pandang, disebut Litofan. Ada beberapa alat yang tersedia untuk melakukan ini tanpa pengkodean apa pun. Tapi di mana kesenangannya? Saya ingin menginspirasi AndaHanya untuk memperjelas, saya tidak membuat seri ini untuk menunjukkan kepada Anda solusi luar biasa untuk membuat model 3D atau untuk mengesankan Anda dengan keterampilan matematika saya yang berkarat, atau bahkan geometri dasar saya atau bahkan keterampilan pemrograman Python Numpy saya yang belum sempurna. Mereka semua kurang, saya tahu. Tapi itulah intinya Saya membuat seri ini untuk menginspirasi siapa saja yang ingin melakukan pengembangan perangkat lunak, bahwa segala sesuatu mungkin terjadi jika Anda mencobanya. Saya juga ingin bagaimana pengembangan perangkat lunak benar-benar dilakukan. Tidak ada hiasan dan tidak ada pengulangan. Anda juga tidak perlu tahu segalanya dari awal Bagaimana saya berencana membuat model 3D dari sebuah FotoCara saya berencana membuat model foto 3D sangat sederhana. Saya akan memuat gambar dan mengubahnya dari warna menjadi skala abu-abu. Kemudian saya akan mengubah ukuran gambar menjadi ukuran model 3D yang ingin saya buat Kemudian saya akan menggunakan intensitas piksel dari gambar grayscale yang diubah ukurannya untuk menentukan ketebalan setiap titik dalam model 3D, sehingga menciptakan model 3D dari sebuah foto. Sederhana bukan? Alat yang akan Anda butuhkan
Video pertama dari seri saya tersedia di bagian atas halaman. Seluruh solusi tersedia di https. //github. com/armindocachada/create-3d-model-using-python Tapi saya sarankan Anda mulai dari awal. Saya akan menganggap Anda ingin melakukan yang terakhir Saat Anda siap untuk memulai, buka Google Colab. Buat buku catatan kosong dan bersiaplah Instal BlenderHal pertama yang harus Anda lakukan jika Anda tidak memiliki cara untuk menampilkan file STL adalah mengunduh Blender dan menginstalnya di komputer Anda Blender adalah perangkat lunak Pemodelan 3D yang sangat populer dan sepenuhnya gratis yang juga digunakan untuk membuat animasi 2D/3D yang menakjubkan dan di antara banyak hal lainnya, pengembangan game. Blender juga memiliki juru bahasa Python bawaan yang memberi Anda akses ke fungsi pemodelan 3D Blender. Tapi, kami tidak akan menggunakan salah satu dari fungsi tersebut. Setidaknya tidak hari ini Instal Numpy-STLGoogle Colab sudah menginstal Numpy. Yang perlu Anda tambahkan hanyalah Numpy STL !pip3 install numpy-stl Mencoba Contoh Quickstart NumpyLangkah pertama adalah mencoba contoh paling sederhana dalam dokumentasi Numpy STL. Dengan mencoba import numpy as np_ Saat menjalankan cuplikan kode di Google Colab, kami mendapatkan file STL bernama cube. stl dengan objek 3D berikut Ini adalah kubus dengan 12 wajah. Setiap wajah adalah segitiga Untuk memahami apa yang dilakukan kode, ada baiknya jika kita mencari definisi di Geometri untuk setiap konsep Verteks/simpulTitik sudut adalah sudut, atau lebih tepatnya, titik di mana dua garis berpotongan WajahWajah adalah permukaan datar individu, bagian dari benda padat. Kubus contoh kita memiliki 12 wajah individual. Dan setiap wajah adalah segitiga. Namun, jangan berpikir bahwa segitiga adalah satu-satunya jenis wajah yang bisa Anda gunakan. Anda bisa memiliki wajah segiempat atau bahkan wajah dengan lebih dari 4 sisi Saya tidak tahu tentang Anda, tetapi bagi saya, itu sudah cukup rumit dengan 3 sisi. Jadi saya akan tetap dengan segitiga Wajah SegitigaTepianKode di atas tidak secara eksplisit menyebutkan edge, namun menurut saya penting untuk menyebutkannya demi kelengkapan. Garis tepi adalah garis yang menghubungkan dua simpul. Sederhana bukan? Puncak Normal Vertex Normal adalah vektor yang menunjuk ke arah yang ditunjuk oleh wajah JalaSekarang mari kita definisikan apa itu mesh Jaring adalah kumpulan simpul, tepi, dan muka yang menggambarkan bentuk objek 3D. Seperti yang sudah dijelaskan sebelumnya wajah bisa memiliki bentuk yang berbeda-beda, namun selama latihan kita hanya akan menggunakan wajah segitiga Sekarang setelah kita menyingkirkan definisinya, cuplikan kode menjadi lebih masuk akal Kami pertama-tama membuat daftar simpul kubus yang berbeda sebagai larik Numpy dari koordinat [X, Y, Z]. vertices = np.array([\ [-1, -1, -1], [+1, -1, -1], [+1, +1, -1], [-1, +1, -1], [-1, -1, +1], [+1, -1, +1], [+1, +1, +1], [-1, +1, +1]]) Kemudian kita membuat array Numpy lain dengan wajah menggunakan indeks dari setiap simpul yang telah ditentukan sebelumnya faces = np.array([\ [0,3,1], [1,3,2], [0,4,7], [0,7,3], [4,5,6], [4,6,7], [5,1,2], [5,2,6], [2,3,6], [3,7,6], [0,1,5], [0,5,4]]) Array Numpy ini sebenarnya hanyalah struktur data perantara yang kemudian digunakan untuk membuat Mesh # Create the mesh cube = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype)) for i, f in enumerate(faces): for j in range(3): print(vertices[f[j],:]) cube.vectors[i][j] = vertices[f[j]]_ Setiap elemen di Mesh. daftar vektor berisi tiga simpul, yang, ketika dihubungkan, menentukan wajah Memahami stl. Jala. dtypeKetika saya pertama kali menemukan stl. Jala. dtype, ketika mempelajari dokumentasi Numpy STL saya jelas menemukan definisi ini. Dan inilah alasannya dtype = dtype([('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))]) Kecuali jika Anda seorang ahli Python/Numpy yang berpengalaman, Anda mungkin akan meludahkan kopi saat melihat definisi di atas. Ketika saya pertama kali melihat ini, saya melakukan apa yang biasanya dilakukan oleh kebanyakan pengembang perangkat lunak. Mencoba memahami, mengabaikan dan melanjutkan Tetapi sekarang setelah saya menulis artikel ini, saya pikir saya siap untuk menguraikannya Apa itu Dtype?Untuk menjawab pertanyaan ini saya akan mengutip langsung dari dokumentasi Numpy
Dalam definisi tipe untuk tipe Mesh, kita mendefinisikan normal sebagai ('normals', '<f4', (3,))_ 'normals' adalah nama bidangnya, tidak banyak bicara ' Little-Endian apa? . Ini ada hubungannya dengan cara kita menyimpan angka, di memori. Di Little-endian, byte yang paling tidak signifikan disimpan terlebih dahulu, mis. e. di alamat memori yang lebih rendah. Big Endian adalah kebalikannya Bagian terakhir dari teka-teki adalah (3,) ini menunjukkan bahwa normal memiliki subarray dari 3 bidang. Setiap bidang memiliki tipe ' Sederhana bukan? Anda dapat melihat bahwa sisa dari definisi dtype dengan cara yang hampir sama. Contohnya ' |