Saya berkuliah di Universitas Gunadarma angkatan 2009, jurusan Teknik Informatika dari fakultas Teknologi Industri. Studentsite Gunadarma merupakan wadah mahasiswa Universitas Gunadarma untuk mendapatkan informasi kegiatan kampus.
Saya dan teman teman saya mencoba mentranslate sebuah buku berjudul FOCUS ON 3D MODELS. saya mentranslate buku ini untuk menyelesaikan tugas softskill Desain Pemodelan Grafik. berikut linknya: http://www.4shared.com/rar/iSlV_Huq/TERJEMAHAN_3D_MODELS.html mohon maaf apabila masih belum sempurna. terimakasih
Rabu, 28 Desember 2011
Pendahuluan
FOKUS PADA 3D MODEL
© 2003 oleh Premier Press, sebuah divisi dari Teknologi Kursus. All rights reserved. Tidak ada bagian dari buku ini dapat direproduksi atau ditransmisikan dalam bentuk apapun atau dengan cara apapun, elektronik atau mekanik, termasuk fotokopi, rekaman, atau cara penyimpanan informasi atau pengambilan sistem tanpa izin tertulis dari Premier Tekan, kecuali untuk pencantuman singkat kutipan di review.
Logo Premier Press dan perdagangan terkait adalah merek dagang dari Premier Pers dan tidak boleh digunakan tanpa izin tertulis.
Penerbit: Stacy L. Hiquet
Manajer Pemasaran: Heather Hurley
Akuisisi Editor: Mitzi Foster Koontz
Proyek / Copy Editor: Kezia Endsley
Teknis Reviewer: Kelly Dempski
Interior Layout: Danielle Foster
Sampul Desainer: Mike Tanamachi
Indexer: Kelly Talbot
Proofreader: Jenny Davidson
Wolfenstein, Doom, dan Quake adalah hak cipta id Software. Half-Life adalah hak cipta
VALVE Perangkat Lunak. Unreal adalah hak cipta MegaGames Epic. Seri game Descent
adalah hak cipta Parallax. Milkshape 3D diciptakan oleh perusahaan chUmbaLum lembut.
Discreet adalah sebuah divisi dari Autodesk, Inc, 3d Studio Max, 3D Studio VIZ, Studio Karakter,Api, Api, Flint, Frost, Inferno, Lightscape, Asap, Streaming, dan Wire terdaftar
merek dagang, dan Discreet, 3ds Max, Backdraft, Pembakaran, Jobnet, dan Sparks yang
merek dagang dari Autodesk, Inc, Discreet Logic Inc di Amerika Serikat dan / atau negara lain.
Mental ray adalah merek dagang terdaftar dari citra mental GmbH & Co KG. Vecta3D-MAX adalah merek dagang dari IdeaWorks3D, Ltd Semua nama merek, nama produk, atau merek dagang milik pemegang masing-masing. (C) Copyright 2002 Autodesk, Inc All rights reserved.
Penting: Premier Press tidak dapat menyediakan dukungan perangkat lunak. Silahkan hubungi produsen perangkat lunak dukungan teknis baris atau situs Web untuk bantuan.
Premier Press dan penulis telah berusaha untuk membedakan merek dagang eksklusif dari istilah deskriptif dengan mengikuti gaya kapitalisasi yang digunakan oleh produsen.
Informasi yang terkandung dalam buku ini telah diperoleh oleh Premier Press dari sumber
yang dapat dipercaya. Namun, karena kemungkinan kesalahan manusia atau mekanis oleh sumber kami, Premier press, atau orang lain, Penerbit tidak menjamin keakuratan,kecukupan, atau kelengkapan informasi apapun dan tidak bertanggung jawab atas kesalahan atau kelalaian atau hasil yang diperoleh dari penggunaan informasi tersebut. Pembaca harus menyadari fakta bahwa Internet adalah entitas yang selalu berubah. Beberapa fakta mungkin telah berubah sejak buku ini dicetak.
ISBN: 1-59200-033-9
Katalog Perpustakaan Kongres Nomor Kartu: 2002111229
Dicetak di Amerika Serikat
03 04 05 06 07 BH 10 9 8 7 6 5 4 3 2 1
Premier Press, sebuah divisi dari Teknologi Kursus
2645 Erie Avenue, Suite 41
Cincinnati, Ohio 45208
UCAPAN TERIMA KASIH
Terlebih dulu, terima kasih kepada orang tua saya untuk mengizinkan saya melakukan hal ini; tanpa dukungan merka dan mensupport dengan tidak melihat saya sebagian besar musim panas ini tidak akan pernah mungkin terjadi.
Sebuah berkat besar untuk Trent Polack telah membantu saya mengamankan kesepakatan ini buku dan
menjadi seorang teman yang mengagumkan dan programmer. Tanpa kalian, aku tidak akan pernah berhasil sampai ke tempat saya hari ini.
Aku tidak bisa melupakan semua orang yang besar atas di gamedev.net, flipcode.com. Kalian telah berharga dalam membantu saya memilah-milah masalah, bug squash, dan teman-teman terbaik. Ada terlalu banyak nama, tapi beberapa yang telah terbukti tak ternilai telah Nicholas Cooper, Sean Kent, Denis Lukianov,Ron Penton, dan Henrik Stuart.
Untuk teman saya dan penyelamat Amy untuk paksa menyeretku menjauh dari komputer saya dan keluar dari ruangan saya setiap begitu sering, itu membuat saya gila.
Terakhir, namun pasti tidak sedikit, yang besar berkat orang-orang Premier Press, terutama Mitzi untuk tetap dengan saya sepanjang waktu aku sedang menulis. Dukungan Anda telah hebat, bahkan melalui komputer,Internet, dan masalah komunikasi. Semua editor yang bekerja, anda semua telah mengajari saya banyak pelajaran berharga karena saya telah bekerja pada buku pertama saya. Saya berharap untuk bekerja dengan kalian semua lagi.
Tentang Penulis
Evan Pipho selalu tertarik pada komputer dan elektronik. Sebagai anak muda, ia belajar untuk mengoperasikan IBM PC ayahnya, bermain game, dan bereksperimen dengan banyak program di dalamnya. Sambil bermain dengan mesin Windows ayahnya, dia mulai mengenal bahasa seperti QBASIC dan C dan menghabiskan waktunya untuk pengembangan game. Dia telah memutuskan sejak lama bahwa ia ingin mengejar pengembangan game, sehingga ia langsung belajar dan masuk beberapa kelas di perguruan tinggi dan beberapa bulan di depan komputer, dia ketagihan!
Anda dapat mengunjungi forum penulis di http://www.codershq.com. Klik Forum link. Jika Anda lebih suka email pribadi ke forum publik, Anda dapat hubungi dia di evan@codershq.com.
DAFTAR ISI
Surat dari Editor .............. xvi
Pendahuluan dan Ikhtisar .................... xix
Bab 1 Meninjau Matriks dan Vektor .............. 1
Bab 2 Pengantar Quaternions ................. 23
Bab 3 Quake II MD2 Model ....................... 37
Bab 4 OBJ ............................... 61
Bab 5 Sebuah Pengantar Animasi rangka ..... 71
Bab 6 Milkshape 3D .................................... 87
Bab 7 Model 3ds ................................ 109
Bab 8 MDL, Format Half-Life legendaris ... 127
Bab 9 Masukkan Quake: Quake III
Format MD3 ..................................... 135
Bab 10 Tips, Trik, dan Metode .................... 153
Lampiran A Format Model 3D Umum ................. 165
Lampiran B STL Primer Vector ........................... 169
Lampiran C Pergi Di atas dan Beyond .................... 183
Indeks .............................................. 191
ISI
Surat dari Editor ..................... xvi
Pendahuluan dan Ikhtisar ........................... xix
BAB 1 Meninjau Matriks
dan Vektor .......................... 1
Memahami dan Menggunakan Matriks .............................................. 2
Zero dan Matriks Identitas ............................................ .................................. 3
Operasi matriks ………………………………………………………………5
Determinan Matriks ............................................... ...........................................8
Para Invers dari Matriks……………………………………………………… 9
Menggunakan dan Memahami Vektor .............................................. ................12
Notasi vektor…………………………………………………………………..14
Besaran Vektor dan Unit .............................................. .....................................14
Aritmatika vektor............................................... ................................................14
Produk vektor………………………………………………………………… 17
Transformasi Vektor dengan Matriks ............................................ ............... 19
Para CD Kode………………………………………………………………… 20
Kesimpulan……………………………………………………………………. 21
BAB 2 Pengantar Quaternions ....................... 23
Apakah angka empat dan Mengapa Apakah Mereka Digunakan? .................... 24
Angka empat Operasi ................................................ ....................................... 26
Konversi angka empat ................................................ ...................................... 28
Interpolasi dengan Quaternions ............................................... ...........................34
LERP (Interpolasi Linear Quaternions) ........................................... ...................35
SLERP (Bulat Linear Interpolation) ............................................ ........................35
Kesimpulan …………………………………………………………………….36
BAB 3 Quake II
Model MD2 ....................... 37
Memahami Fungsi FILE............................................. ........................................ 39
Melihat Kode Sumber ............................................. ............................................43
Data: Frame dan simpul ............................................ ..........................................46
Membuat Ini Padat: Segitiga………………………………………………….. 48
Hasil rendering untuk Pertama Kalinya ........................................... ...................50
Kecantikan: Menambahkan Skins .............................................. .........................52
Membuat Ini Pindah: Animasi ............................................. ...............................55
Strip dan Fans: Perintah GL ............................................ ....................................56
Kesimpulan……………………………………………………………………. 58
BAB 4 Memuat File OBJ ... …………………………………………………61
Parsing File Teks ……………………………………………………………...62
Memahami Format obj .............................................. .........................................63
Memuat Format OBJ ………………………………………………………….66
Rendering ……………………………………………………………………..68
Kesimpulan ……………………………………………………………………70
BAB 5 Sebuah Pengantar Animasi rangka ............... ………………………71
Memahami Animasi rangka ............................................... .................................73
Manfaat Animasi rangka .............................................. .......................................73
Cara kerja batin Animasi rangka ............................................. ............................75
Keyframes dalam rangka Animasi .............................................. .........................77
Mengambil Posisi ………………………………………………………………78
Menempelkan Mesh …………………………………………………………….80
Demo ……………………………………………………………………………82
Demo Kontrol …………………………………………………………………...82
Aplikasi Advanced Animasi rangka ............................................. ....................... 85
Kesimpulan ……………………………………………………………………...86
BAB 6 Milkshape 3D ........ …………………………………………………….87
Mendapatkan Data ………………………………………………………………88
Simpul …………………………………………………………………………...89
Wajah ……………………………………………………………………………90
Jerat ……………………………………………………………………………...92
Bahan ……………………………………………………………………………93
Animasi …………………………………………………………………………99
Menemukan Orangtua Hilang .............................................. ...............................101
Persiapan Awal ………………………………………………………………...102
Animasi dan Interpolasi ............................................... ........................................103
Kesimpulan …………………………………………………………………….108
BAB 7 Para Model 3ds .... …………………………………………………….109
Memahami File 3ds Chunky .............................................. ..................................110
3ds Chunk Header: Mulai ............................................ ........................................112
3ds File Data ……………………………………………………………………113
Header 0x4D4D ………………………………………………………………...113
Para 0x0002 Versi Chunk .............................................. ......................................113
Objek dalam Chunk 0x4000 ............................................. ...................................113
Bahan 0xAFFF …………………………………………………………………120
Rendering 3ds File Anda ……………………………………………………….122
Kesimpulan ……………………………………………………………………..125
BAB 8 MDL, Para Legendaris Half-Life Format ................ ………………..127
File Viewer MDL Valve .............................................. ........................................129
Menginisialisasi Model ………………………………………………………130
Rendering Kode MDL .............................................. .........................................131
Menghidupkan Model ………………………………………………………...131
Untuk Praktek selengkapnya ... ……………………………………………….132
Kesimpulan …………………………………………………………………....133
BAB 9 Masukkan Quake:Quake III MD3 Format ....... …………………...135
Mengambil data ……………………………………………………………….137
Header MD3 …………………………………………………………………..138
Boneframes ……………………………………………………………………138
Struktur Tag MD3 ……………………………………………………………..140
Jerat …………………………………………………………………………….141
Menggunakan Model Multi-Bagian ……………………………………………148
Tags …………………………………………………………………………….149
Kesimpulan …………………………………………………………………….151
BAB 10 Tips, Trik,dan Metode ...................... ……………………………….153
Menghitung normals Wajah ............................................... .................................154
Menghitung Vertex …………………………………………………………….155
Membuat Format Sendiri .............................................. .......................................156
Format Teks Berbasis ………………………………………………………….156
Format biner Berbasis .............................................. ............................................157
Perencanaan File ……………………………………………………………….157
Membuat File …………………………………………………………………..160
Interpolasi linier ………………………………………………………………..161
Tips Pengoptimalan ……………………………………………………………162
Kesimpulan ………………………………………………………………….....164
LAMPIRAN A Model 3D Umum
Format .......................... 165
LAMPIRAN B STL Vector Primer ……………………………………………169
STL ……………………………………………………………………………..170
Dasar-dasar dari Menggunakan Vektor ............................................. ..................170
Penyortiran ……………………………………………………………………..173
Pencarian ……………………………………………………………………….174
Menggunakan Objek Sendiri .............................................. .................................176
Pointer ………………………………………………………………………….179
Kesimpulan …………………………………………………………………….181
LAMPIRAN C Pergi atas
dan Beyond ....................... 183
Untuk Informasi Lebih Lanjut ………………………………………………….186
Apa yang ada di CD …………………………………………………………….188
Indeks ................................................. ..... ………………………………………191
Surat dari Editor
Sebagai programmer game 3D, cepat atau lambat waktu datang ketika Anda bosan dengan kubus dan terbang berputar kapal ruang dalam ruang. Anda ingin karakter 3D sepenuhnya diartikulasikan dan animasi. Jadi Anda mulai mencari di Internet untuk daripadanya informasi,dan cepat atau lambat Anda menyadari bahwa meskipun ada banyak situs dengan informasi-dan banyak demo-itu semua agak berguna dalam realitas. Ada terlalu banyak lubang dalam format file penjelasan, dan pada akhirnya Anda mungkin akan lebih baik reverse-engineering file daripada menyeberang melalui hacker dokumen setelah dokumen hacker.
Masalah ini adalah salah satu yang saya pribadi telah berurusan dengan
untuk waktu yang lama. Ketika saya pertama kali ingin menulis sebuah file Quake
loader, saya berpikir bahwa akan mudah, harus ada satu miliar
situs di Internet dengan penjelasan yang jelas dan ringkas, kan?
Namun, tidak ada! Sejauh yang saya tahu ada benar-benar hanya
satu pun dokumen pada Internet dengan format file. MD2,
dan itu tidak lengkap, tetapi lebih dari sebuah FAQ. Selain itu, ini
hanya format file, tetapi tidak benar-benar menjelaskan semua rincian. Hal ini
hanya satu contoh. Ada banyak. Intinya adalah bahwa
apakah itu format permainan seperti Quake itu. MD2 atau. MD3 atau 3D
Format file Studio Max, tidak ada cukup tempat tunggal untuk menemukan
informasi. Masalah ini adalah motivasi untuk buku ini.
Tujuan saya untuk buku ini adalah untuk memberikan referensi tunggal untuk
format file yang paling populer, tetapi pada saat yang sama mengajari Anda bagaimana untuk menggunakannya. Artinya, itu berguna untuk menunjukkan cara membacasetiaptombol frame dari file MD2. jika Anda tidak tahu bagaimana untuk interpolasi mereka. Dengan demikian, penulis, Evan Pipho, tidak hanya mencakup setiap format file penting (dalam alasan), tapi dia juga dibahas
materi dasar seperti matematika, animasi tulang,
dan banyak lagi. Jika Anda membuka buku ini tidak mengetahui satu hal pun
tentang karakter animasi 3D, pada akhir buku ini, Anda akan
tahu bagaimana bekerja dengan semua format file yang populer, bagaimana
menulis pembaca, dan bagaimana untuk benar-benar menghidupkan jala-jala secara realtime
dalam aplikasi Anda. Tentu saja, buku ini mengasumsikan bahwa Anda sudah familiar dengan grafis 3D, DirectX (atau OpenGL) dan
Anda dapat membuat mesin 3D sempurna baik memanfaatkan suatu
API atau secara manual dengan perangkat lunak yang minimal dapat membuat
poligon dan melakukan kliping, proyeksi, dan rasterization.
Meskipun demikian, saya tidak bisa mengatakan betapa senang saya tentang buku ini.
Ini yang pertama dari jenisnya-tidak ada buku lain tunggal pada
pasar yang menggambarkan semua format file dari sebuah permainan
pemrogram sudut pandang.
Sebagai kesimpulan, ini adalah buku lagi bahwa tidak ada permainan 3D programmer bisa tanpa.Ketika saya menulis surat ini buku ini tidak
bahkan dicetak, tapi saya mencetak hard copy hanya untuk memiliki
dimeja saya untuk merujuk!
Hormat kami,
AndreLaMothe
Seri Editor untuk Pembangunan Seri Premier Press Permainan.
Pendahuluan
Trend baru merayap ke video game pada tingkat yang luar biasa.Kecenderungan ini membuat game lebih realistis, lebih dipercaya, dan dalam beberapa kasus, lebih menyenangkan. Sebagian besar permainan baru menggunakan tren ini, dan konsumen melahap game-game atas secepat mereka dapat dibuat. Ini tren baru, tentu saja, adalah penggunaan 3D. Dari model pemain untuk dunia game virtual, pemain menuntut beberapa bentuk interaksi 3D.
Gagasan interaksi 3D mencakup banyak genre, bahkan mereka yang secara tradisional telah 2D. Permainan seperti Blizzard Warcraft 3 telah membawa interaksi 3D ke dalam "Real Time Strategy" genre, sebuah genre yang umumnya didominasi oleh game 2D. Bahkan puzzle dan lainnya "nilai game "mulai untuk menghubungkan ke gagasan 3D.
Pada saat yang sama, produsen perangkat keras yang menciptakan yang lebih baik dan lebih cepat perangkat keras. Ultra-cepat prosesor dan kartu grafis mampu menangani jutaan potongan geometri 3D setiap detik menjadi sangat biasa di komputer rumah rata-rata. Hal ini memungkinkan Anda sebagai permainan pengembang untuk menulis game lebih realistis dan grafis yang intensif tanpa
menyebabkan komputer konsumen rata-rata 'untuk merangkak di bawah batu di
melihat mereka. Generasi baru kartu grafis yang memungkinkan lebih dan lebih dari perhitungan harus dilakukan pada kartu grafis, membebaskan sampai prosesor untuk berkonsentrasi pada aspek-aspek lain dari permainan, seperti suara, AI musuh, dan, well, efek bahkan lebih grafis.
Banyak perusahaan telah menyadari bahwa 3D adalah masa depan video game
dan telah bekerja untuk menyediakan pemain dengan top-rate grafis dan realisme,
termasuk yang berikut:
■ id Software (http://www.idsoftware.com) Mulai tahun 1992,
pencipta Wolfenstein revolusioner, Doom, dan Quake
seri adalah salah satu perusahaan pertama untuk mewujudkan impian 3D.
Mesin 3D mereka telah dilisensi oleh perusahaan lain untuk digunakan
dalam permainan yang tak terhitung jumlahnya.
■ VALVE Perangkat Lunak (http://www.valvesoftware.com) Meskipun
VALVE datang dalam sedikit lebih dari id, masih mengguncang dunia dengan
rilis Half-Life pada bulan November 1998. Para grafis
aspek Half-Life adalah pikiran-boggling, belum lagi
maju AI dan alur cerita yang luar biasa. Untuk pertama kalinya, teknologi maju seperti animasi skeletal dan berwarna pencahayaan yang tersedia pada komputer di rumah.
■ Epic MegaGames (http://www.epicgames.com) Dengan indah Unreal Engine, Epic membuka dunia untuk game dengan besar luar daerah, mengakhiri koridor sempit dan kamar kecil dari permainan sebelumnya.
■ Parallax (http://www.pxsoftware.com/) Parallax menunjukkan gamer bagaimana menakjubkan enam derajat kebebasan penuh bisa. dengan serangkaian permainan, Parallax membuka pintu untuk keseluruhan dimensi baru dalam industri game 3D.
■ 3DFX Saya tidak bisa mengabaikan kontribusi dari sekarang almarhum Video produsen chipset. 3DFX memperkenalkan umum publik untuk keajaiban akselerasi 3D dengan 3D hardware rilis dari seri Voodoo kartu video. Mereka adalah tercepat
Anda bisa membeli sampai nVidia TNT2 mereka merilis Ultra. Para kemampuan PC di rumah untuk mempercepat grafis 3D membuka cara untuk baru, permainan grafis canggih.
Perusahaan-perusahaan dan permainan hanyalah beberapa dari banyak kontributor fenomena 3D. Banyak game datang dan pergi, tanpa diketahui oleh masyarakat umum, dan bahkan untuk sebagian besar gamer. Meski begitu, beberapa dari mereka telah memperkenalkan teknologi baru dan ide-ide yang telah mengubah
wajah dunia game selamanya.
Tujuan Buku ini
Kemungkinan jika Anda membaca ini, Anda baru saja mendapat buku, atau
Anda sedang berdiri di sebuah toko buku yang mencoba untuk memutuskan apakah Anda harus mendapatkannya. Jika Anda tertarik untuk membuat game 3D, buku ini akan mengajarkan Anda bagaimana menerapkan sesuatu untuk bekerja dengan salah satu bagian yang paling penting,Model 3D. Buka salah satu game favorit 3D Anda. Lihatlah di sekitar Anda; melihat musuh-musuh di sana? Atau bagaimana yang paket kesehatan dan senjata duduk di pojok menunggu Anda untuk mengambil? Semua fitur ini diciptakan oleh 3DModel yang diciptakan oleh seniman dan dimuat ke dalam permainan oleh programmer seperti Anda.
Jadi sekarang Anda mungkin bertanya-tanya, "bagaimana saya akan mendapatkan keuntungan jika saya mendapatkan buku ini dan apa yang akan saya pelajari "Anda akan mempelajari semua macam barang keren di sini?.
Setelah Anda membaca ini Anda harus dapat:
■ Memahami cara memuat berbagai format model 3D.
■ Tampilan dan menjiwai berbagai jenis model dalam program Anda.
■ Memahami bagaimana animasi kerangka, inovasi yang menggunakan
"Kerangka" dalam model untuk keperluan animasi, bekerja. Rangka animasi menggunakan "tulang" dan "sendi" yang melekat pada model mesh untuk melakukan animasi. Rangka animasi memiliki banyak keunggulan dibandingkan animasi keyframe tradisional, termasuk mengurangi ruang penyimpanan, peningkatan kemudahan animasi untuk seniman, dan gerakan yang lebih realistis. Anda akan belajar jauh lebih banyak tentang teknologi luar biasa nanti dalam buku ini.
■ Lampirkan model untuk model lain untuk membentuk objek yang lebih kompleks.
Dua bab pertama yang didedikasikan untuk review dari matematika penting
keterampilan, dengan review singkat dari vektor dan matriks. Kemudian, setelah Anda membaca penelaahan terhadap angka empat sulit dipahami, Anda harus ditetapkan untuk sebagian besar matematika yang digunakan dalam bab-bab yang tersisa.
Setelah meninjau keterampilan matematika yang diperlukan, Anda pindah tepat ke beberapa format seperti OBJ (Bab 4) dan MD2 (Bab 5). Anda akan berjalan melalui struktur data dan prosedur memuat dibutuhkan untuk setiap jenis. Kode ditaburkan melalui teks dalam bentuk fungsi kecil atau struktur data, tetapi tidak pernah ada besar kode pembuangan.
Dari format yang sederhana, Anda akan belajar tentang dua dari paling penting dan berguna teknologi dalam model 3D: animasi kerangka dan penandaan. Anda sudah belajar apa animasi rangka adalah dalam sebelumnya bullet daftar.
Tagging, karena banyak panggilan itu, adalah kemampuan untuk melampirkan model sehingga mereka bergerak bersama-sama. Teknik ini digunakan untuk melakukan hal-hal seperti melampirkan model senjata ke tangan karakter, atau bahkan model potongan bersama-sama dari bagian, seperti kepala, batang tubuh, dan model kaki. Baca terus untuk Bab 9 dan Anda akan belajar lebih banyak tentang teknologi ini berguna, dan bagaimana berlaku untuk Quake 3 yang Format MD3.
Setelah Anda belajar tentang matematika diperlukan dan bermain sedikit dengan format sederhana,, Anda dapat melihat pada loading beberapa format yang lebih rumit. Beberapa dari ini akan skeletally animasi menggunakan teknik yang dijelaskan dalam bab-bab sebelumnya, dan beberapa mengandung tag untuk membuat model penuh karakter. Sekali lagi, setiap detail dari format akan diuraikan untuk memungkinkan implementasi yang mudah dalam permainan Anda sendiri.
Siapa yang Harus Baca Buku Ini
Anda tidak perlu banyak pengalaman pemrograman untuk menggunakan buku ini. Semua dari kode yang ditunjukkan di seluruh buku ini ditulis dalam C + +, sehingga dasar pemahaman tentang C / C + + adalah suatu keharusan. Demo pada CD ditulis menggunakan C + +, dengan OpenGL sebagai API grafis. Saya mencoba untuk menyimpan semua kode dan demo sesederhana mungkin untuk membuat port ke bahasa lain dan grafis API mungkin. Karena itu, demo mungkin tidak dioptimalkan sebanyak yang mereka bisa, sehingga merasa bebas untuk mencari cara untuk mengoptimalkan dan mempercepat mereka.
Jika Anda perlu memoles baik C + + atau OpenGL, saya sarankan Anda kunjungi http://www.gametutorials.com dan http://nehe.gamedev.net bantuan.
Referensi yang baik lainnya termasuk buku-buku dari Premier Game Programming
seri. OpenGL Game Programming dan Game Pemrograman Semua Dalam Satu akan menempatkan Anda dalam posisi yang sangat baik untuk sisa buku.
Setelah Anda memiliki pemahaman yang layak dari C + + dan OpenGL, Anda hampir siap untuk memulai perjalanan Anda ke dunia luas 3D.
Buku ini mengasumsikan Anda dapat membuat mesin 3D dasar, baik oleh memanfaatkan API atau secara manual dengan perangkat lunak yang, minimal, dapat membuat poligon dan melakukan kliping, proyeksi, dan rasterization.
Anda juga akan perlu memiliki pemahaman yang baik tentang aljabar dan trigonometri.
Memahami vektor, matriks, dan quaternions juga penting. Jika Anda merasa tidak nyaman dengan salah satu dari mereka (kecuali mungkin bagian angka empat, satu tidak ada benar-benar pernah merasa nyaman dengan mereka), saya akan menyarankan kunjungan singkat ke http://www.math.com untuk aljabar dan trigonometri, dan Bab tinjauan 1 dan 2 untuk review vektor,matriks, dan matematika angka empat. Sekarang Anda siap untuk menaklukkan model 3D. Bersenang-senang!
Apa yang ada di dalam CD
Seperti yang anda lihat, ada CD melekat pada penutup belakang buku. Ada banyak hal keren di sana. Semua kode sumber untuk semua format model yang dibahas dalam buku ini, ditambah beberapa tambahan untuk format yang tidak cocok dimasukkan. Juga termasuk adalah 3D ekstra Model yang dibuat oleh komunitas pengembangan game. Silakan cek File README untuk masing-masing model sebelum menggunakan mereka dalam Anda sendiri proyek-proyek. File-file README berisi nama masing-masing penulis, alamat email, dan setiap persyaratan penggunaan bahwa ia telah menempatkan sebagainya mengenai penggunaannya atau karya seninya.
Menggali lebih dalam pada CD, Anda akan menemukan berbagai alat yang digunakan dalam manufaktur 3D model dan obyek terkait lainnya, seperti kulit dan tekstur. Juga termasuk adalah shareware dan versi trial dari software popular. Coba
mereka semua dan melihat mana yang Anda ingin membeli dan menyimpan. Folder tambahan berisi berbagai proyek dan kode sumber yang ditulis oleh orang lain anggota masyarakat. Seperti karya seni, silahkan baca README
file disertakan dengan segala sesuatu untuk menghindari pelanggaran hak cipta.
Sesekali akan ada perbaikan bug dan update untuk kode sumber pada CD. Check out http://books.codershq.com. Saya berharap di masa depan untuk rilis loader lebih untuk jenis lain model 3D, serta port mereka ke bahasa lain dan API, jadi memeriksa situs sering.
Kata Akhir Sebelum Anda Mulai
Saya harap buku ini berguna saat Anda mulai menulis 3D impian Anda. Hal terbaik untuk dilakukan adalah mencoba untuk menulis kode Anda sendiri dari teks,bukan menyalinnya dari contoh-contoh. Anda akan belajar jauh lebih banyak. Jika Anda frustasi pada awalnya, tetap terus mencoba,nanti anda akan bisa. Bahkan nama-nama besar dalam industri game 3D tidak bisa melakukannya dengan benar
pertama kalinya. Ingat, elemen yang paling penting dari pengembangan game adalah untuk bersenang-senang! Selamat membaca.
© 2003 oleh Premier Press, sebuah divisi dari Teknologi Kursus. All rights reserved. Tidak ada bagian dari buku ini dapat direproduksi atau ditransmisikan dalam bentuk apapun atau dengan cara apapun, elektronik atau mekanik, termasuk fotokopi, rekaman, atau cara penyimpanan informasi atau pengambilan sistem tanpa izin tertulis dari Premier Tekan, kecuali untuk pencantuman singkat kutipan di review.
Logo Premier Press dan perdagangan terkait adalah merek dagang dari Premier Pers dan tidak boleh digunakan tanpa izin tertulis.
Penerbit: Stacy L. Hiquet
Manajer Pemasaran: Heather Hurley
Akuisisi Editor: Mitzi Foster Koontz
Proyek / Copy Editor: Kezia Endsley
Teknis Reviewer: Kelly Dempski
Interior Layout: Danielle Foster
Sampul Desainer: Mike Tanamachi
Indexer: Kelly Talbot
Proofreader: Jenny Davidson
Wolfenstein, Doom, dan Quake adalah hak cipta id Software. Half-Life adalah hak cipta
VALVE Perangkat Lunak. Unreal adalah hak cipta MegaGames Epic. Seri game Descent
adalah hak cipta Parallax. Milkshape 3D diciptakan oleh perusahaan chUmbaLum lembut.
Discreet adalah sebuah divisi dari Autodesk, Inc, 3d Studio Max, 3D Studio VIZ, Studio Karakter,Api, Api, Flint, Frost, Inferno, Lightscape, Asap, Streaming, dan Wire terdaftar
merek dagang, dan Discreet, 3ds Max, Backdraft, Pembakaran, Jobnet, dan Sparks yang
merek dagang dari Autodesk, Inc, Discreet Logic Inc di Amerika Serikat dan / atau negara lain.
Mental ray adalah merek dagang terdaftar dari citra mental GmbH & Co KG. Vecta3D-MAX adalah merek dagang dari IdeaWorks3D, Ltd Semua nama merek, nama produk, atau merek dagang milik pemegang masing-masing. (C) Copyright 2002 Autodesk, Inc All rights reserved.
Penting: Premier Press tidak dapat menyediakan dukungan perangkat lunak. Silahkan hubungi produsen perangkat lunak dukungan teknis baris atau situs Web untuk bantuan.
Premier Press dan penulis telah berusaha untuk membedakan merek dagang eksklusif dari istilah deskriptif dengan mengikuti gaya kapitalisasi yang digunakan oleh produsen.
Informasi yang terkandung dalam buku ini telah diperoleh oleh Premier Press dari sumber
yang dapat dipercaya. Namun, karena kemungkinan kesalahan manusia atau mekanis oleh sumber kami, Premier press, atau orang lain, Penerbit tidak menjamin keakuratan,kecukupan, atau kelengkapan informasi apapun dan tidak bertanggung jawab atas kesalahan atau kelalaian atau hasil yang diperoleh dari penggunaan informasi tersebut. Pembaca harus menyadari fakta bahwa Internet adalah entitas yang selalu berubah. Beberapa fakta mungkin telah berubah sejak buku ini dicetak.
ISBN: 1-59200-033-9
Katalog Perpustakaan Kongres Nomor Kartu: 2002111229
Dicetak di Amerika Serikat
03 04 05 06 07 BH 10 9 8 7 6 5 4 3 2 1
Premier Press, sebuah divisi dari Teknologi Kursus
2645 Erie Avenue, Suite 41
Cincinnati, Ohio 45208
UCAPAN TERIMA KASIH
Terlebih dulu, terima kasih kepada orang tua saya untuk mengizinkan saya melakukan hal ini; tanpa dukungan merka dan mensupport dengan tidak melihat saya sebagian besar musim panas ini tidak akan pernah mungkin terjadi.
Sebuah berkat besar untuk Trent Polack telah membantu saya mengamankan kesepakatan ini buku dan
menjadi seorang teman yang mengagumkan dan programmer. Tanpa kalian, aku tidak akan pernah berhasil sampai ke tempat saya hari ini.
Aku tidak bisa melupakan semua orang yang besar atas di gamedev.net, flipcode.com. Kalian telah berharga dalam membantu saya memilah-milah masalah, bug squash, dan teman-teman terbaik. Ada terlalu banyak nama, tapi beberapa yang telah terbukti tak ternilai telah Nicholas Cooper, Sean Kent, Denis Lukianov,Ron Penton, dan Henrik Stuart.
Untuk teman saya dan penyelamat Amy untuk paksa menyeretku menjauh dari komputer saya dan keluar dari ruangan saya setiap begitu sering, itu membuat saya gila.
Terakhir, namun pasti tidak sedikit, yang besar berkat orang-orang Premier Press, terutama Mitzi untuk tetap dengan saya sepanjang waktu aku sedang menulis. Dukungan Anda telah hebat, bahkan melalui komputer,Internet, dan masalah komunikasi. Semua editor yang bekerja, anda semua telah mengajari saya banyak pelajaran berharga karena saya telah bekerja pada buku pertama saya. Saya berharap untuk bekerja dengan kalian semua lagi.
Tentang Penulis
Evan Pipho selalu tertarik pada komputer dan elektronik. Sebagai anak muda, ia belajar untuk mengoperasikan IBM PC ayahnya, bermain game, dan bereksperimen dengan banyak program di dalamnya. Sambil bermain dengan mesin Windows ayahnya, dia mulai mengenal bahasa seperti QBASIC dan C dan menghabiskan waktunya untuk pengembangan game. Dia telah memutuskan sejak lama bahwa ia ingin mengejar pengembangan game, sehingga ia langsung belajar dan masuk beberapa kelas di perguruan tinggi dan beberapa bulan di depan komputer, dia ketagihan!
Anda dapat mengunjungi forum penulis di http://www.codershq.com. Klik Forum link. Jika Anda lebih suka email pribadi ke forum publik, Anda dapat hubungi dia di evan@codershq.com.
DAFTAR ISI
Surat dari Editor .............. xvi
Pendahuluan dan Ikhtisar .................... xix
Bab 1 Meninjau Matriks dan Vektor .............. 1
Bab 2 Pengantar Quaternions ................. 23
Bab 3 Quake II MD2 Model ....................... 37
Bab 4 OBJ ............................... 61
Bab 5 Sebuah Pengantar Animasi rangka ..... 71
Bab 6 Milkshape 3D .................................... 87
Bab 7 Model 3ds ................................ 109
Bab 8 MDL, Format Half-Life legendaris ... 127
Bab 9 Masukkan Quake: Quake III
Format MD3 ..................................... 135
Bab 10 Tips, Trik, dan Metode .................... 153
Lampiran A Format Model 3D Umum ................. 165
Lampiran B STL Primer Vector ........................... 169
Lampiran C Pergi Di atas dan Beyond .................... 183
Indeks .............................................. 191
ISI
Surat dari Editor ..................... xvi
Pendahuluan dan Ikhtisar ........................... xix
BAB 1 Meninjau Matriks
dan Vektor .......................... 1
Memahami dan Menggunakan Matriks .............................................. 2
Zero dan Matriks Identitas ............................................ .................................. 3
Operasi matriks ………………………………………………………………5
Determinan Matriks ............................................... ...........................................8
Para Invers dari Matriks……………………………………………………… 9
Menggunakan dan Memahami Vektor .............................................. ................12
Notasi vektor…………………………………………………………………..14
Besaran Vektor dan Unit .............................................. .....................................14
Aritmatika vektor............................................... ................................................14
Produk vektor………………………………………………………………… 17
Transformasi Vektor dengan Matriks ............................................ ............... 19
Para CD Kode………………………………………………………………… 20
Kesimpulan……………………………………………………………………. 21
BAB 2 Pengantar Quaternions ....................... 23
Apakah angka empat dan Mengapa Apakah Mereka Digunakan? .................... 24
Angka empat Operasi ................................................ ....................................... 26
Konversi angka empat ................................................ ...................................... 28
Interpolasi dengan Quaternions ............................................... ...........................34
LERP (Interpolasi Linear Quaternions) ........................................... ...................35
SLERP (Bulat Linear Interpolation) ............................................ ........................35
Kesimpulan …………………………………………………………………….36
BAB 3 Quake II
Model MD2 ....................... 37
Memahami Fungsi FILE............................................. ........................................ 39
Melihat Kode Sumber ............................................. ............................................43
Data: Frame dan simpul ............................................ ..........................................46
Membuat Ini Padat: Segitiga………………………………………………….. 48
Hasil rendering untuk Pertama Kalinya ........................................... ...................50
Kecantikan: Menambahkan Skins .............................................. .........................52
Membuat Ini Pindah: Animasi ............................................. ...............................55
Strip dan Fans: Perintah GL ............................................ ....................................56
Kesimpulan……………………………………………………………………. 58
BAB 4 Memuat File OBJ ... …………………………………………………61
Parsing File Teks ……………………………………………………………...62
Memahami Format obj .............................................. .........................................63
Memuat Format OBJ ………………………………………………………….66
Rendering ……………………………………………………………………..68
Kesimpulan ……………………………………………………………………70
BAB 5 Sebuah Pengantar Animasi rangka ............... ………………………71
Memahami Animasi rangka ............................................... .................................73
Manfaat Animasi rangka .............................................. .......................................73
Cara kerja batin Animasi rangka ............................................. ............................75
Keyframes dalam rangka Animasi .............................................. .........................77
Mengambil Posisi ………………………………………………………………78
Menempelkan Mesh …………………………………………………………….80
Demo ……………………………………………………………………………82
Demo Kontrol …………………………………………………………………...82
Aplikasi Advanced Animasi rangka ............................................. ....................... 85
Kesimpulan ……………………………………………………………………...86
BAB 6 Milkshape 3D ........ …………………………………………………….87
Mendapatkan Data ………………………………………………………………88
Simpul …………………………………………………………………………...89
Wajah ……………………………………………………………………………90
Jerat ……………………………………………………………………………...92
Bahan ……………………………………………………………………………93
Animasi …………………………………………………………………………99
Menemukan Orangtua Hilang .............................................. ...............................101
Persiapan Awal ………………………………………………………………...102
Animasi dan Interpolasi ............................................... ........................................103
Kesimpulan …………………………………………………………………….108
BAB 7 Para Model 3ds .... …………………………………………………….109
Memahami File 3ds Chunky .............................................. ..................................110
3ds Chunk Header: Mulai ............................................ ........................................112
3ds File Data ……………………………………………………………………113
Header 0x4D4D ………………………………………………………………...113
Para 0x0002 Versi Chunk .............................................. ......................................113
Objek dalam Chunk 0x4000 ............................................. ...................................113
Bahan 0xAFFF …………………………………………………………………120
Rendering 3ds File Anda ……………………………………………………….122
Kesimpulan ……………………………………………………………………..125
BAB 8 MDL, Para Legendaris Half-Life Format ................ ………………..127
File Viewer MDL Valve .............................................. ........................................129
Menginisialisasi Model ………………………………………………………130
Rendering Kode MDL .............................................. .........................................131
Menghidupkan Model ………………………………………………………...131
Untuk Praktek selengkapnya ... ……………………………………………….132
Kesimpulan …………………………………………………………………....133
BAB 9 Masukkan Quake:Quake III MD3 Format ....... …………………...135
Mengambil data ……………………………………………………………….137
Header MD3 …………………………………………………………………..138
Boneframes ……………………………………………………………………138
Struktur Tag MD3 ……………………………………………………………..140
Jerat …………………………………………………………………………….141
Menggunakan Model Multi-Bagian ……………………………………………148
Tags …………………………………………………………………………….149
Kesimpulan …………………………………………………………………….151
BAB 10 Tips, Trik,dan Metode ...................... ……………………………….153
Menghitung normals Wajah ............................................... .................................154
Menghitung Vertex …………………………………………………………….155
Membuat Format Sendiri .............................................. .......................................156
Format Teks Berbasis ………………………………………………………….156
Format biner Berbasis .............................................. ............................................157
Perencanaan File ……………………………………………………………….157
Membuat File …………………………………………………………………..160
Interpolasi linier ………………………………………………………………..161
Tips Pengoptimalan ……………………………………………………………162
Kesimpulan ………………………………………………………………….....164
LAMPIRAN A Model 3D Umum
Format .......................... 165
LAMPIRAN B STL Vector Primer ……………………………………………169
STL ……………………………………………………………………………..170
Dasar-dasar dari Menggunakan Vektor ............................................. ..................170
Penyortiran ……………………………………………………………………..173
Pencarian ……………………………………………………………………….174
Menggunakan Objek Sendiri .............................................. .................................176
Pointer ………………………………………………………………………….179
Kesimpulan …………………………………………………………………….181
LAMPIRAN C Pergi atas
dan Beyond ....................... 183
Untuk Informasi Lebih Lanjut ………………………………………………….186
Apa yang ada di CD …………………………………………………………….188
Indeks ................................................. ..... ………………………………………191
Surat dari Editor
Sebagai programmer game 3D, cepat atau lambat waktu datang ketika Anda bosan dengan kubus dan terbang berputar kapal ruang dalam ruang. Anda ingin karakter 3D sepenuhnya diartikulasikan dan animasi. Jadi Anda mulai mencari di Internet untuk daripadanya informasi,dan cepat atau lambat Anda menyadari bahwa meskipun ada banyak situs dengan informasi-dan banyak demo-itu semua agak berguna dalam realitas. Ada terlalu banyak lubang dalam format file penjelasan, dan pada akhirnya Anda mungkin akan lebih baik reverse-engineering file daripada menyeberang melalui hacker dokumen setelah dokumen hacker.
Masalah ini adalah salah satu yang saya pribadi telah berurusan dengan
untuk waktu yang lama. Ketika saya pertama kali ingin menulis sebuah file Quake
loader, saya berpikir bahwa akan mudah, harus ada satu miliar
situs di Internet dengan penjelasan yang jelas dan ringkas, kan?
Namun, tidak ada! Sejauh yang saya tahu ada benar-benar hanya
satu pun dokumen pada Internet dengan format file. MD2,
dan itu tidak lengkap, tetapi lebih dari sebuah FAQ. Selain itu, ini
hanya format file, tetapi tidak benar-benar menjelaskan semua rincian. Hal ini
hanya satu contoh. Ada banyak. Intinya adalah bahwa
apakah itu format permainan seperti Quake itu. MD2 atau. MD3 atau 3D
Format file Studio Max, tidak ada cukup tempat tunggal untuk menemukan
informasi. Masalah ini adalah motivasi untuk buku ini.
Tujuan saya untuk buku ini adalah untuk memberikan referensi tunggal untuk
format file yang paling populer, tetapi pada saat yang sama mengajari Anda bagaimana untuk menggunakannya. Artinya, itu berguna untuk menunjukkan cara membacasetiaptombol frame dari file MD2. jika Anda tidak tahu bagaimana untuk interpolasi mereka. Dengan demikian, penulis, Evan Pipho, tidak hanya mencakup setiap format file penting (dalam alasan), tapi dia juga dibahas
materi dasar seperti matematika, animasi tulang,
dan banyak lagi. Jika Anda membuka buku ini tidak mengetahui satu hal pun
tentang karakter animasi 3D, pada akhir buku ini, Anda akan
tahu bagaimana bekerja dengan semua format file yang populer, bagaimana
menulis pembaca, dan bagaimana untuk benar-benar menghidupkan jala-jala secara realtime
dalam aplikasi Anda. Tentu saja, buku ini mengasumsikan bahwa Anda sudah familiar dengan grafis 3D, DirectX (atau OpenGL) dan
Anda dapat membuat mesin 3D sempurna baik memanfaatkan suatu
API atau secara manual dengan perangkat lunak yang minimal dapat membuat
poligon dan melakukan kliping, proyeksi, dan rasterization.
Meskipun demikian, saya tidak bisa mengatakan betapa senang saya tentang buku ini.
Ini yang pertama dari jenisnya-tidak ada buku lain tunggal pada
pasar yang menggambarkan semua format file dari sebuah permainan
pemrogram sudut pandang.
Sebagai kesimpulan, ini adalah buku lagi bahwa tidak ada permainan 3D programmer bisa tanpa.Ketika saya menulis surat ini buku ini tidak
bahkan dicetak, tapi saya mencetak hard copy hanya untuk memiliki
dimeja saya untuk merujuk!
Hormat kami,
AndreLaMothe
Seri Editor untuk Pembangunan Seri Premier Press Permainan.
Pendahuluan
Trend baru merayap ke video game pada tingkat yang luar biasa.Kecenderungan ini membuat game lebih realistis, lebih dipercaya, dan dalam beberapa kasus, lebih menyenangkan. Sebagian besar permainan baru menggunakan tren ini, dan konsumen melahap game-game atas secepat mereka dapat dibuat. Ini tren baru, tentu saja, adalah penggunaan 3D. Dari model pemain untuk dunia game virtual, pemain menuntut beberapa bentuk interaksi 3D.
Gagasan interaksi 3D mencakup banyak genre, bahkan mereka yang secara tradisional telah 2D. Permainan seperti Blizzard Warcraft 3 telah membawa interaksi 3D ke dalam "Real Time Strategy" genre, sebuah genre yang umumnya didominasi oleh game 2D. Bahkan puzzle dan lainnya "nilai game "mulai untuk menghubungkan ke gagasan 3D.
Pada saat yang sama, produsen perangkat keras yang menciptakan yang lebih baik dan lebih cepat perangkat keras. Ultra-cepat prosesor dan kartu grafis mampu menangani jutaan potongan geometri 3D setiap detik menjadi sangat biasa di komputer rumah rata-rata. Hal ini memungkinkan Anda sebagai permainan pengembang untuk menulis game lebih realistis dan grafis yang intensif tanpa
menyebabkan komputer konsumen rata-rata 'untuk merangkak di bawah batu di
melihat mereka. Generasi baru kartu grafis yang memungkinkan lebih dan lebih dari perhitungan harus dilakukan pada kartu grafis, membebaskan sampai prosesor untuk berkonsentrasi pada aspek-aspek lain dari permainan, seperti suara, AI musuh, dan, well, efek bahkan lebih grafis.
Banyak perusahaan telah menyadari bahwa 3D adalah masa depan video game
dan telah bekerja untuk menyediakan pemain dengan top-rate grafis dan realisme,
termasuk yang berikut:
■ id Software (http://www.idsoftware.com) Mulai tahun 1992,
pencipta Wolfenstein revolusioner, Doom, dan Quake
seri adalah salah satu perusahaan pertama untuk mewujudkan impian 3D.
Mesin 3D mereka telah dilisensi oleh perusahaan lain untuk digunakan
dalam permainan yang tak terhitung jumlahnya.
■ VALVE Perangkat Lunak (http://www.valvesoftware.com) Meskipun
VALVE datang dalam sedikit lebih dari id, masih mengguncang dunia dengan
rilis Half-Life pada bulan November 1998. Para grafis
aspek Half-Life adalah pikiran-boggling, belum lagi
maju AI dan alur cerita yang luar biasa. Untuk pertama kalinya, teknologi maju seperti animasi skeletal dan berwarna pencahayaan yang tersedia pada komputer di rumah.
■ Epic MegaGames (http://www.epicgames.com) Dengan indah Unreal Engine, Epic membuka dunia untuk game dengan besar luar daerah, mengakhiri koridor sempit dan kamar kecil dari permainan sebelumnya.
■ Parallax (http://www.pxsoftware.com/) Parallax menunjukkan gamer bagaimana menakjubkan enam derajat kebebasan penuh bisa. dengan serangkaian permainan, Parallax membuka pintu untuk keseluruhan dimensi baru dalam industri game 3D.
■ 3DFX Saya tidak bisa mengabaikan kontribusi dari sekarang almarhum Video produsen chipset. 3DFX memperkenalkan umum publik untuk keajaiban akselerasi 3D dengan 3D hardware rilis dari seri Voodoo kartu video. Mereka adalah tercepat
Anda bisa membeli sampai nVidia TNT2 mereka merilis Ultra. Para kemampuan PC di rumah untuk mempercepat grafis 3D membuka cara untuk baru, permainan grafis canggih.
Perusahaan-perusahaan dan permainan hanyalah beberapa dari banyak kontributor fenomena 3D. Banyak game datang dan pergi, tanpa diketahui oleh masyarakat umum, dan bahkan untuk sebagian besar gamer. Meski begitu, beberapa dari mereka telah memperkenalkan teknologi baru dan ide-ide yang telah mengubah
wajah dunia game selamanya.
Tujuan Buku ini
Kemungkinan jika Anda membaca ini, Anda baru saja mendapat buku, atau
Anda sedang berdiri di sebuah toko buku yang mencoba untuk memutuskan apakah Anda harus mendapatkannya. Jika Anda tertarik untuk membuat game 3D, buku ini akan mengajarkan Anda bagaimana menerapkan sesuatu untuk bekerja dengan salah satu bagian yang paling penting,Model 3D. Buka salah satu game favorit 3D Anda. Lihatlah di sekitar Anda; melihat musuh-musuh di sana? Atau bagaimana yang paket kesehatan dan senjata duduk di pojok menunggu Anda untuk mengambil? Semua fitur ini diciptakan oleh 3DModel yang diciptakan oleh seniman dan dimuat ke dalam permainan oleh programmer seperti Anda.
Jadi sekarang Anda mungkin bertanya-tanya, "bagaimana saya akan mendapatkan keuntungan jika saya mendapatkan buku ini dan apa yang akan saya pelajari "Anda akan mempelajari semua macam barang keren di sini?.
Setelah Anda membaca ini Anda harus dapat:
■ Memahami cara memuat berbagai format model 3D.
■ Tampilan dan menjiwai berbagai jenis model dalam program Anda.
■ Memahami bagaimana animasi kerangka, inovasi yang menggunakan
"Kerangka" dalam model untuk keperluan animasi, bekerja. Rangka animasi menggunakan "tulang" dan "sendi" yang melekat pada model mesh untuk melakukan animasi. Rangka animasi memiliki banyak keunggulan dibandingkan animasi keyframe tradisional, termasuk mengurangi ruang penyimpanan, peningkatan kemudahan animasi untuk seniman, dan gerakan yang lebih realistis. Anda akan belajar jauh lebih banyak tentang teknologi luar biasa nanti dalam buku ini.
■ Lampirkan model untuk model lain untuk membentuk objek yang lebih kompleks.
Dua bab pertama yang didedikasikan untuk review dari matematika penting
keterampilan, dengan review singkat dari vektor dan matriks. Kemudian, setelah Anda membaca penelaahan terhadap angka empat sulit dipahami, Anda harus ditetapkan untuk sebagian besar matematika yang digunakan dalam bab-bab yang tersisa.
Setelah meninjau keterampilan matematika yang diperlukan, Anda pindah tepat ke beberapa format seperti OBJ (Bab 4) dan MD2 (Bab 5). Anda akan berjalan melalui struktur data dan prosedur memuat dibutuhkan untuk setiap jenis. Kode ditaburkan melalui teks dalam bentuk fungsi kecil atau struktur data, tetapi tidak pernah ada besar kode pembuangan.
Dari format yang sederhana, Anda akan belajar tentang dua dari paling penting dan berguna teknologi dalam model 3D: animasi kerangka dan penandaan. Anda sudah belajar apa animasi rangka adalah dalam sebelumnya bullet daftar.
Tagging, karena banyak panggilan itu, adalah kemampuan untuk melampirkan model sehingga mereka bergerak bersama-sama. Teknik ini digunakan untuk melakukan hal-hal seperti melampirkan model senjata ke tangan karakter, atau bahkan model potongan bersama-sama dari bagian, seperti kepala, batang tubuh, dan model kaki. Baca terus untuk Bab 9 dan Anda akan belajar lebih banyak tentang teknologi ini berguna, dan bagaimana berlaku untuk Quake 3 yang Format MD3.
Setelah Anda belajar tentang matematika diperlukan dan bermain sedikit dengan format sederhana,, Anda dapat melihat pada loading beberapa format yang lebih rumit. Beberapa dari ini akan skeletally animasi menggunakan teknik yang dijelaskan dalam bab-bab sebelumnya, dan beberapa mengandung tag untuk membuat model penuh karakter. Sekali lagi, setiap detail dari format akan diuraikan untuk memungkinkan implementasi yang mudah dalam permainan Anda sendiri.
Siapa yang Harus Baca Buku Ini
Anda tidak perlu banyak pengalaman pemrograman untuk menggunakan buku ini. Semua dari kode yang ditunjukkan di seluruh buku ini ditulis dalam C + +, sehingga dasar pemahaman tentang C / C + + adalah suatu keharusan. Demo pada CD ditulis menggunakan C + +, dengan OpenGL sebagai API grafis. Saya mencoba untuk menyimpan semua kode dan demo sesederhana mungkin untuk membuat port ke bahasa lain dan grafis API mungkin. Karena itu, demo mungkin tidak dioptimalkan sebanyak yang mereka bisa, sehingga merasa bebas untuk mencari cara untuk mengoptimalkan dan mempercepat mereka.
Jika Anda perlu memoles baik C + + atau OpenGL, saya sarankan Anda kunjungi http://www.gametutorials.com dan http://nehe.gamedev.net bantuan.
Referensi yang baik lainnya termasuk buku-buku dari Premier Game Programming
seri. OpenGL Game Programming dan Game Pemrograman Semua Dalam Satu akan menempatkan Anda dalam posisi yang sangat baik untuk sisa buku.
Setelah Anda memiliki pemahaman yang layak dari C + + dan OpenGL, Anda hampir siap untuk memulai perjalanan Anda ke dunia luas 3D.
Buku ini mengasumsikan Anda dapat membuat mesin 3D dasar, baik oleh memanfaatkan API atau secara manual dengan perangkat lunak yang, minimal, dapat membuat poligon dan melakukan kliping, proyeksi, dan rasterization.
Anda juga akan perlu memiliki pemahaman yang baik tentang aljabar dan trigonometri.
Memahami vektor, matriks, dan quaternions juga penting. Jika Anda merasa tidak nyaman dengan salah satu dari mereka (kecuali mungkin bagian angka empat, satu tidak ada benar-benar pernah merasa nyaman dengan mereka), saya akan menyarankan kunjungan singkat ke http://www.math.com untuk aljabar dan trigonometri, dan Bab tinjauan 1 dan 2 untuk review vektor,matriks, dan matematika angka empat. Sekarang Anda siap untuk menaklukkan model 3D. Bersenang-senang!
Apa yang ada di dalam CD
Seperti yang anda lihat, ada CD melekat pada penutup belakang buku. Ada banyak hal keren di sana. Semua kode sumber untuk semua format model yang dibahas dalam buku ini, ditambah beberapa tambahan untuk format yang tidak cocok dimasukkan. Juga termasuk adalah 3D ekstra Model yang dibuat oleh komunitas pengembangan game. Silakan cek File README untuk masing-masing model sebelum menggunakan mereka dalam Anda sendiri proyek-proyek. File-file README berisi nama masing-masing penulis, alamat email, dan setiap persyaratan penggunaan bahwa ia telah menempatkan sebagainya mengenai penggunaannya atau karya seninya.
Menggali lebih dalam pada CD, Anda akan menemukan berbagai alat yang digunakan dalam manufaktur 3D model dan obyek terkait lainnya, seperti kulit dan tekstur. Juga termasuk adalah shareware dan versi trial dari software popular. Coba
mereka semua dan melihat mana yang Anda ingin membeli dan menyimpan. Folder tambahan berisi berbagai proyek dan kode sumber yang ditulis oleh orang lain anggota masyarakat. Seperti karya seni, silahkan baca README
file disertakan dengan segala sesuatu untuk menghindari pelanggaran hak cipta.
Sesekali akan ada perbaikan bug dan update untuk kode sumber pada CD. Check out http://books.codershq.com. Saya berharap di masa depan untuk rilis loader lebih untuk jenis lain model 3D, serta port mereka ke bahasa lain dan API, jadi memeriksa situs sering.
Kata Akhir Sebelum Anda Mulai
Saya harap buku ini berguna saat Anda mulai menulis 3D impian Anda. Hal terbaik untuk dilakukan adalah mencoba untuk menulis kode Anda sendiri dari teks,bukan menyalinnya dari contoh-contoh. Anda akan belajar jauh lebih banyak. Jika Anda frustasi pada awalnya, tetap terus mencoba,nanti anda akan bisa. Bahkan nama-nama besar dalam industri game 3D tidak bisa melakukannya dengan benar
pertama kalinya. Ingat, elemen yang paling penting dari pengembangan game adalah untuk bersenang-senang! Selamat membaca.
memuat file OBJ
BAB 4
Berikutnya akan membahas File OBJ. Ini adalah format yang baik untuk objek yang statis dalam sebuah game, seperti potongan kecil dari level geometri, senjata yang tergeletak di tanah, dan daya yang tersebar di seluruh tingkat. OBJ format dapat di eksport dari Maya, salah satu standart industri yang mengkreasikan konten 3D, termasuk dunia 3D and tentu saja model 3D untuk game. Digunakan oleh banyak perusahaan game dan artis internasional, Maya telah menjadi salah satu model program 3D yang paling terkenal. Maya dikembangkan dan dijual oleh Alias|waveFront http://www.aliaswavefront.com).
Sebuah ASCII sederhana berbasis format, format model OBJ mengandung data geometry tetapi tanpa animasi. Mungkin kamu ingin menggunakan format ini jika perlu dapat diedit, ataupun membuat file dengan tangan tanpa paket permodelan. Ini juga format yang bagus untuk digunakan jika tidak membutuhkan animasi karena ini sangat mudah digunakan. Meskipun itu bisa mengandung fitur seperti permukaan yang melengkung, fitur tersebut berada diluar lingkup buku ini. Bab ini hanya meliputi geometry dasar. Ini termasuk wajah-wajah yang membentuk model, bersama dengan simpul yang membentuk wajah sendiri. Juga termasuk didalamnya koordinat tekstur , untuk mengijinkan ditambahkannya tekstur map.serta titik normal digunakan untuk penerangan.
MENGURAIKAN FILE TEKS
Sebelum anda bekerja menggunakan file ASCII, anda harus mngerti bagaimana cara menguraikan informasi yang anda butuhkan yang disebut juga menguraikan dari file. C++ sangat sensitive mengenai apa itu tipe data. Anda tidak bisa dengan mudah mengatur bilangan bulat sama dengan string yang berisi sebuah integer dalam format teks dan mengharapkannya untuk bekerja seperti yang Anda pikir. Sebaliknya, anda harus mengekstraksi data dan mengkonversikannya menggunakan fungsi khusus. Dua fungsi terbaik untuk melakukannya yaitu sscanf(untuk mengekstraksi data dari string) dan fscanf (untuk melakukan hal yang sama dengan file). Kedua fungsi tersebut memiliki parameter yang sama, dengan pengecualian dari tiap parameter. Parameter pertama untuk sscanf adalah string yang menahan data yang tidak terformat, sedangkan parameter pertama dari fscanf adalah pointer fileyang ingin anda ekstrak. Parameter kedua adalah yang terpenting. Memegang string yang disebut format string. Format string membahas tentang scanf yang mana tipe variable mencari dan dalam urutan yang bagaimana. Sebagai contoh format string, tabel 4.1 menunjukan bagaimana membuat format string anda.
Variable terakhir adalah pointer ke variable yang ingin anda simpan kedalam nilai konversi anda. Karena fungsi scanf mengambil nomor variable dari argument, anda dapat membacanya dengan berbagai nilai dalam 1 waktu seperti yang anda inginkan. Ini adalah yang terbaik diikat dengan contoh sederhana. Katakanlah Anda memiliki sebuah string, disebut szVertex, yang berisi baris:
Vertex 15 - [14.12, 12.51, 33.10];
Anda dapat melihatnya ada sebuah string, integer dan 3 nilai floating point, sama bagusnya dengan koma, tanda kurung dan titik koma. Anda ingin mengekstrak bagian-bagian yang berguna dan menyimpannya di tipe data yang benar sehingga Anda dapat menggunakannya di kemudian hari dalam program Anda.
Fungsi Scanf akan tampak seperti berikut ini :
sscanf(szVertex, "%s %d – [%f, %f, %f];", s, &i, &f1, &f2, &f3);
seperti yang dapat anda lihat format string terlihat banyak seperti garis aslinya, hanya dengan nilai yang sebenarnya dihapus. Argument % menjelaskan sscanf digunakan untuk mencari lokasi. Tabel 4.1 memperlihatkan kepada anda banyak digunakannya argument % dan dengan apa mereka berdiri. Set terakhir dari parameter adalah daftar tujuan varable. S sebagai string, ada kemungkinan sebagai karakter array, dan I menunjukan integer dan f1, f2, f3 menunjukan banyaknya floating point yang memegang tiga nilai antara kurung persegi. Pastikan tujuan dari variable anda cocok dengan argument yang tepat dalam format string (s menuju kepada string, I menuju kepada inteer dan &f1, &f2, &f3 menuju kepada nilai floating point). Anda dapat melakukan apapun dsini dengan menampilkan fscanf, hanya parameter pertama adalah pointer file daripada sumber string.
MEMAHAMI FORMAT OBJ
Seperti disebutkan, format OBJ didalam teks biasa. Jika Anda membukanya di Notepad
atau Wordpad, Anda akan melihat daftar simpul dan geometri lainnya. ASCII (teks biasa) memiliki format berbasis daripada biner yang memiliki kelebihan dan kekurangan. Karena mereka disimpan dalam teks biasa, lebih mudah untuk seseorang untuk mengedit file tersebut dengan tangan. Ini bisa baik atau buruk. Hal ini adalah yang baik jika Anda perlu tweak bagian kecil dari model, tetapi tweak dapat berakhir pada bencana jika Anda secara tidak sengaja mengubah cara file ditata. Format ASCII juga cenderung untuk mengambil ruang disk lebih dari biner berdasarkan format karena mereka membutuhkan ruang ekstra untuk nilai-nilai besar karena panjangnya satu "bagian" dari geometri pada setiap baris.
Tabel 4.1 Parameter untuk Format String
PARAMETER FUNGSI
% s Adalah format string yang berarti bahwa scanf akan mencari string. Akan terus membacanya sampai menemukan null,ruang,atau karakter garis baru
%c %c membaca karakter tunggal. Dan akan membaca karakter pertama yang dilihat.
%d Membaca bilangan bulat.dengan scanf akan membaca bilangan bulat sampai menemukan spasi,huruf,dan simbol yang bukan angka. %d akan membaca integer positif dan negatif.
%f %f akan membaca bilangan real.
Seperti yang anda lihat,disini ada 4 tipe garis. Mereka adalah garis yang memberikan rincian tentang simpul, koordinat tekstur, titik normal,atau wajah. Mungkin ada jalur lain untuk hal-hal seperti permukaan melengkung dan komentar juga, tetapi Anda tidak akan membutuhkan itu di sini.
Setiap baris dari file model yang dimulai dengan satu atau dua huruf yang menceritakan
program,untuk apa garis itu. Ada empat jenis prefiks, yang akan dijelaskan di sini:
V: Surat v diikuti oleh spasi adalah simpul plain vanilla. Jika hal ini adalah kasus, berikut sebuah ruang tunggal akan tiga floating-point nilai, masing-masing dipisahkan dengan spasi tunggal juga.
vt: String vt menandakan bahwa baris berisi koordinat tekstur. Setiap koordinat tekstur adalah dua float lagi dipisahkan oleh satu spasi.
vn: vn menandakan titik normal. Selain awalan, baris cermin garis titik: tiga float.
f: f menandakan sebuah wajah. Wajah adalah satu set indeks ke dalam array
simpul, texcoords, dan normals. Namun, hanya simpul indeks harus ada; dua yang lain adalah opsional. Setiap Indeks simpul harus positif. Sebuah nilai negatif di wajah
struktur mungkin berarti file tersebut rusak karena Anda tidak bisa memiliki indeks array negatif. Ini tidak akan benar untuk mengatakan "mengambil obyek kedua negatif, "sehingga Anda jelas tidak bisa mengambil "negatif kedua" simpul baik. Pendekatan terbaik jika Anda menemukan nilai negatif dalam struktur wajah untuk mengabaikan
wajah sama sekali.
Lainnya: Setiap baris prefiks lain seperti g (group), # (komentar), p (titik), l (baris), surfing (permukaan), dan curv (kurva) harus diabaikan untuk saat ini. Meskipun mereka adalah bagian dari format,mereka tidak dibahas di sini.
Sebuah garis khas dalam file obj yang mewakili wajah atau segitiga dan hanya berisi simpul akan terlihat seperti ini:
f 1 2 3
Kode ini mengatakan bahwa wajah menggunakan titik pertama, kedua, dan ketiga indeks untuk menggambar segitiga. Tidak adanya set lain indeks menunjukkan bahwa tekstur koordinat dan titik normals tidak diperlukan.
Jika wajah yang bertekstur, tetapi tidak mengandung titik normals, sintaks akan sama dengan ini:
f 1 / 4 2 / 5 3 / 6
Baris ini mengatakan bahwa segitiga menggunakan simpul 1, 2, dan 3 dan tekstur indeks 4, 5, dan 6.
Namun variasi lain dari garis ini dapat menggunakan semua tiga jenis simpul data koordinat tekstur titik,, dan indeks yang normal. Baris yang akan terlihat seperti:
f 1/4/7 2/5/8 3/6/9
Angka pertama adalah untuk simpul itu sendiri, yang kedua adalah untuk tekstur mengkoordinasikan, dan yang ketiga adalah untuk titik normal.
Hanya ada satu variasi yang lebih: normals vertex dan titik, tetapi tidak ada koordinat tekstur. Ini terlihat seperti ini:
f 1 / / 4 2 / / 5 3 / / 6
Dua garis miring memisahkan angka bukan satu, ini menunjukkan bahwa angka kedua adalah normal simpul, bukan koordinat tekstur.
Kenyataan bahwa wajah tidak perlu berisi semua informasi dapat sangat berguna. Tidak ada alasan sebuah objek yang tidak memerlukan pencahayaan atau texturing harus berisi informasi tersebut. Dengan hanya meninggalkan tidak dibutuhkan informasi di luar, ukuran file berkurang jauh.
Mari kita sekarang beralih ke beberapa kode yang menunjukkan Anda bagaimana untuk memuat file menjadi sesuatu yang bisa anda kerjakan.
Memuat Format OBJ
Karena obj tidak berisi apapun di header, Anda membutuhkan beberapa semacam array resizable untuk memegang simpul Anda, wajah, dan komponen lainnya. Dalam pelaksanaannya ditampilkan di sini, semuanya dimuat ke sebuah STL vektor, semacam array resizable.
Setiap jenis data memiliki struktur tersendiri. Vector3 berisi dua float dan digunakan untuk menyimpan posisi titik tunggal, atau normal vertex. Vector2 jauh seperti saudara yang lebih besar, tetapi memegang hanya dua nilai, cocok untuk koordinat tekstur.
Terakhir dari semua adalah SObjFace, yang berisi 12 bilangan bulat unsigned, tiga untuk
setiap sudut indeks, indeks tekstur coord, dan indeks yang normal. bahkan jika semua variabel wajah tidak selalu digunakan, penyimpanannya masih ada.
Sekarang Anda siap untuk membaca dalam file. Cara terbaik untuk melakukan ini adalah membaca dalam satu baris pada satu waktu, memeriksa awalan, dan ekstrak sisa nilai menggunakan fungsi sscanf. Setiap jenis nilai (data titik, titik yang normal, tekstur mengkoordinasikan, dan wajah) memiliki array sendiri untuk menahannya. Jika loader menemukan baris yang dimulai dengan sesuatu yang tidak menandakan diakui setengah, itu hanya membaca garis dan membuangnya.
Dalam kelas CObj, ada dua nilai Boolean: m_bHasTexCoords dan m_bHasNormals. Variabel ini diatur ke benar jika coord tekstur (untuk m_bHasTexCoords) atau garis normal verteks (untuk m_bHasNormals) ditemukan dalam file. Meskipun hal ini tidak bekerja, ia memiliki beberapa kekurangan. Jika untuk beberapa alasan wajah tidak ada setelah semua titik, loader tidak akan tahu apa jenis wajah untuk membaca dan akan default hanya untuk membaca simpul.
PERHATIAN
Karena format OBJ dapat diprediksi dan juga dapat diedit dengan mudah, akan sangat membantu untuk memiliki beberapa pengecekan error. Misalnya, struktur wajah mungkin referensi simpul yang tidak valid, seperti jumlah titik -2, atau jumlah titik besar dari jumlah total simpul. Untuk menghindari masalah, Anda harus memasukkan beberapa error untuk memeriksa ke dalam kode Anda. Setiap kali Anda memuat nilai, pastikan untuk memeriksa apakah itu sah. Sebagai contoh, tidak ada nomor pada garis wajah harus negatif. Karena mereka adalah indeks ke dalam array, mereka harus positif atau program dapat hancur. Hal yang sama berlaku untuk lebih besar dari jumlah total simpul, tekstur nilai-nilai koordinat, atau normals. Jika wajah referensi simpul luar dari apa yang seharusnya, pilihan terbaik adalah untuk mengabaikan bahwa wajah sepenuhnya. Melakukan hal ini mungkin akan mengakibatkan sebuah lubang dalam model Anda, tetapi sebuah lubang kecil akan terlihat lebih baik daripada tonjolan jelek jika Anda mencoba untuk menebak apa indeks apa yang seharusnya.
Hal ini dapat menyebabkan hasil yang tidak diharapkan seperti hilang atau cacat geometri,
atau bahkan model tidak muncul sama sekali. Jika ini terjadi,pemecahan termudah adalah dengan hanya membuka file dan memindahkan informasi simpul yang bagian atas file. Namun, untuk tujuan pembelajaran dan loading yang OBJs paling umum, ini seharusnya tidak menjadi masalah.
Ketika Anda turun ke face data, anda hanya melihat dua variabel dan mengatur parameter sscanf anda tepat.
Setelah anda memiliki semua data yang dikumpulkan dan disimpan, ada beberapa lagi
hal yang harus Anda lakukan sebelum render. Jika Anda melihat pada kelas,Anda akan melihat bahwa ada pointer untuk semua jenis, serta vektor resizable. Ada alasan yang sangat bagus untuk ini.
Cara termudah untuk mengakses elemen dari sebuah vektor STL adalah melalui operator [] seperti yang Anda lakukan dengan array standar. Namun, metode ini dapat cukup lambat dan tidak dianjurkan, terutama jika Anda perlu menggunakannya setiap kali anda membuat satu frame, seperti halnya dengan format OBJ.
Solusi untuk ini adalah hanya mengatur pointer ke elemen pertama dalam STL vektor. Ini tidak menyebabkan masalah karena STL vektor dijamin akan terus-menerus.Sekarang semua data Anda sudah terorganisir, Anda dapat mulai khawatir tentang render.
RENDERING OBJ
Mari kita lihat apa yang dapat Anda lakukan tentang hal ini pada layar. Jika Anda beralih ke CObj ini:: Render () fungsi dalam obj.cpp, Anda akan melihat apa yang diperlukan untuk mendapatkan segalanya pada layar. Hal pertama yang dilakukan adalah untuk mengaktifkan dan mengikat tekstur. Pastikan untuk memeriksa apakah tekstur berlaku sebelum memanggil untuk menghindari masalah.
Kemudian Anda bisa mulai rendering. Hal pertama yang terjadi adalah ia akan mengecek untuk melihat komponen yang termasuk dalam model dan memilih loop didasarkan pada hasil. Ada loop terpisah untuk setiap kombinasi yang mungkin,untuk meningkatkan kecepatan. Dalam pseudo-kode, kode render akan terlihat seperti kode berikut. Perlu diingat pseudo-kode hanya memberi Anda tata letak dasar tentang bagaimana fungsi akan terlihat. Ini harus jelas bahwa kode berikut tidak akan mengkompilasi dalam C reguler / C + + compiler.
for(each vertex)
if(normals are present)
SendNormal();
if(texcoords are present)
SendtexCoord();
SendVertex()
Itu akan memerlukan dua pernyataan if untuk setiap titik, yang merupakan sisa waktu prosesor ketika Anda dapat lakukan dengan pasangan tetapi untuk setiap frame.Sebaliknya, strukturnya lebih seperti ini:
if(has normals and tex coords)
for(each vertex)
SendNormal()
SendTexCoord()
SendVertex()
else if(has texcoords but not normals)
for(each vertex)
SendTexCoords()
SendVertex();
TIP
Karena geometri adalah statis, Anda mungkin ingin mempertimbangkan kompilasi semua kode Anda untuk menampilkan daftar list. Sebuah daftar tampilan menciptakan objek dikompilasi dan akan mengurangi waktu pemrosesan yang diperlukan untuk setiap frame. Hal ini dapat dilakukan pada saat membuka di OpenGL menggunakan glGenList fungsi dan glNewList. Kemudian, didalam rending fungsi anda, daripada mengirim setiap simpul ke renderer, Anda cukup menjalankan glCallList dengan tepat menampilkan daftar untuk menampilkan model Anda.
Dan seterusnya. Meskipun pendekatan ini lebih panjang, jauh lebih efisien. Untuk mendapatkan nilai yang sesuai untuk masing-masing komponen, Anda menggunakan struktur wajah indeks ke dalam array normals, tex coords, dan simpul. Ada satu kekhasan kecil di sini. Namun untuk beberapa alasan,pencipta dari format OBJ memutuskan untuk membuat 1 indeks pertama,bukan dari 0. Untuk mengatasi ini, Anda harus mengurangkan 1 dari masing-masing titik,tekstur koordinat, dan titik yang normal indeks yang membentuk wajah.
Hal ini dilakukan pada saat membuka dalam kode demo, lihat konstruktor dari SObjFace untuk informasi lebih lanjut. Selamat bersenang-senang.
Untuk lebih jelasnya,lihat model sepenuhnya yang ditunjukkan dalam Gambar 4.1.
TIP
OBJ format sebenarnya memiliki lebih banyak format untuk ditawarkan. hal ini dapat mendukung beberapa jenis permukaan melengkung, wajah yang telah lebih dari tiga sisi, dan hal menarik lainnya. Jika Anda merasa ambisius, coba memodifikasi loader untuk bekerja dengan semua hal-hal ekstra. Ada dokumen lengkap Obj di seluruh Internet. Cukup ketik Format OBJ dipencarian. Beberapa link yang bisa dijadikan bahan antara lain http://astronomy.swin.edu.au/ ~ pbourke / geomformats / obj / dan http://www.royriggs.com/obj.html. Keduanya berisi deskripsi dari format file obj; URL pertama mencakup Format penuh, termasuk garis, titik, permukaan, dan kurva.
Gambar 4.1 Model OBJ lentera jin . Model khusus ini termasuk simpul saja. Untuk lebih jelasnya buka di sini di wireframe. Model ini dibuat oleh John Spirko (http://www.iaw.on.ca/ ~ jspirko / galleries.htm) dan ditemukan di 3D Model Dunia (http://www.3dmodelworld.com). Pastikan untuk melihat kedua situs tersebut untuk model lainnya.
KESIMPULAN
Kesimpulan dari bab ini. Meskipun format OBJ dasar cukup sederhana, konsep-konsep dari bab ini dapat digunakan untuk hal lain di ASCII berbasis format Anda mungkin menemukan, seperti ASE dan ASC. Bab berikutnya membahas beberapa informasi lebih lanjut dengan pengenalan kerangka animasi. Dalam bab berikut, Anda akan melihat bagaimana kerangka animasi telah mengubah dunia game dan belajar tentang beberapa permainan yang sudah menggunakannya. Anda juga akan belajar bagaimana kerangka
animasi bekerja, dan alasan mengapa Anda mungkin ingin menggunakan itu dalam permainan berikutnya.
Berikutnya akan membahas File OBJ. Ini adalah format yang baik untuk objek yang statis dalam sebuah game, seperti potongan kecil dari level geometri, senjata yang tergeletak di tanah, dan daya yang tersebar di seluruh tingkat. OBJ format dapat di eksport dari Maya, salah satu standart industri yang mengkreasikan konten 3D, termasuk dunia 3D and tentu saja model 3D untuk game. Digunakan oleh banyak perusahaan game dan artis internasional, Maya telah menjadi salah satu model program 3D yang paling terkenal. Maya dikembangkan dan dijual oleh Alias|waveFront http://www.aliaswavefront.com).
Sebuah ASCII sederhana berbasis format, format model OBJ mengandung data geometry tetapi tanpa animasi. Mungkin kamu ingin menggunakan format ini jika perlu dapat diedit, ataupun membuat file dengan tangan tanpa paket permodelan. Ini juga format yang bagus untuk digunakan jika tidak membutuhkan animasi karena ini sangat mudah digunakan. Meskipun itu bisa mengandung fitur seperti permukaan yang melengkung, fitur tersebut berada diluar lingkup buku ini. Bab ini hanya meliputi geometry dasar. Ini termasuk wajah-wajah yang membentuk model, bersama dengan simpul yang membentuk wajah sendiri. Juga termasuk didalamnya koordinat tekstur , untuk mengijinkan ditambahkannya tekstur map.serta titik normal digunakan untuk penerangan.
MENGURAIKAN FILE TEKS
Sebelum anda bekerja menggunakan file ASCII, anda harus mngerti bagaimana cara menguraikan informasi yang anda butuhkan yang disebut juga menguraikan dari file. C++ sangat sensitive mengenai apa itu tipe data. Anda tidak bisa dengan mudah mengatur bilangan bulat sama dengan string yang berisi sebuah integer dalam format teks dan mengharapkannya untuk bekerja seperti yang Anda pikir. Sebaliknya, anda harus mengekstraksi data dan mengkonversikannya menggunakan fungsi khusus. Dua fungsi terbaik untuk melakukannya yaitu sscanf(untuk mengekstraksi data dari string) dan fscanf (untuk melakukan hal yang sama dengan file). Kedua fungsi tersebut memiliki parameter yang sama, dengan pengecualian dari tiap parameter. Parameter pertama untuk sscanf adalah string yang menahan data yang tidak terformat, sedangkan parameter pertama dari fscanf adalah pointer fileyang ingin anda ekstrak. Parameter kedua adalah yang terpenting. Memegang string yang disebut format string. Format string membahas tentang scanf yang mana tipe variable mencari dan dalam urutan yang bagaimana. Sebagai contoh format string, tabel 4.1 menunjukan bagaimana membuat format string anda.
Variable terakhir adalah pointer ke variable yang ingin anda simpan kedalam nilai konversi anda. Karena fungsi scanf mengambil nomor variable dari argument, anda dapat membacanya dengan berbagai nilai dalam 1 waktu seperti yang anda inginkan. Ini adalah yang terbaik diikat dengan contoh sederhana. Katakanlah Anda memiliki sebuah string, disebut szVertex, yang berisi baris:
Vertex 15 - [14.12, 12.51, 33.10];
Anda dapat melihatnya ada sebuah string, integer dan 3 nilai floating point, sama bagusnya dengan koma, tanda kurung dan titik koma. Anda ingin mengekstrak bagian-bagian yang berguna dan menyimpannya di tipe data yang benar sehingga Anda dapat menggunakannya di kemudian hari dalam program Anda.
Fungsi Scanf akan tampak seperti berikut ini :
sscanf(szVertex, "%s %d – [%f, %f, %f];", s, &i, &f1, &f2, &f3);
seperti yang dapat anda lihat format string terlihat banyak seperti garis aslinya, hanya dengan nilai yang sebenarnya dihapus. Argument % menjelaskan sscanf digunakan untuk mencari lokasi. Tabel 4.1 memperlihatkan kepada anda banyak digunakannya argument % dan dengan apa mereka berdiri. Set terakhir dari parameter adalah daftar tujuan varable. S sebagai string, ada kemungkinan sebagai karakter array, dan I menunjukan integer dan f1, f2, f3 menunjukan banyaknya floating point yang memegang tiga nilai antara kurung persegi. Pastikan tujuan dari variable anda cocok dengan argument yang tepat dalam format string (s menuju kepada string, I menuju kepada inteer dan &f1, &f2, &f3 menuju kepada nilai floating point). Anda dapat melakukan apapun dsini dengan menampilkan fscanf, hanya parameter pertama adalah pointer file daripada sumber string.
MEMAHAMI FORMAT OBJ
Seperti disebutkan, format OBJ didalam teks biasa. Jika Anda membukanya di Notepad
atau Wordpad, Anda akan melihat daftar simpul dan geometri lainnya. ASCII (teks biasa) memiliki format berbasis daripada biner yang memiliki kelebihan dan kekurangan. Karena mereka disimpan dalam teks biasa, lebih mudah untuk seseorang untuk mengedit file tersebut dengan tangan. Ini bisa baik atau buruk. Hal ini adalah yang baik jika Anda perlu tweak bagian kecil dari model, tetapi tweak dapat berakhir pada bencana jika Anda secara tidak sengaja mengubah cara file ditata. Format ASCII juga cenderung untuk mengambil ruang disk lebih dari biner berdasarkan format karena mereka membutuhkan ruang ekstra untuk nilai-nilai besar karena panjangnya satu "bagian" dari geometri pada setiap baris.
Tabel 4.1 Parameter untuk Format String
PARAMETER FUNGSI
% s Adalah format string yang berarti bahwa scanf akan mencari string. Akan terus membacanya sampai menemukan null,ruang,atau karakter garis baru
%c %c membaca karakter tunggal. Dan akan membaca karakter pertama yang dilihat.
%d Membaca bilangan bulat.dengan scanf akan membaca bilangan bulat sampai menemukan spasi,huruf,dan simbol yang bukan angka. %d akan membaca integer positif dan negatif.
%f %f akan membaca bilangan real.
Seperti yang anda lihat,disini ada 4 tipe garis. Mereka adalah garis yang memberikan rincian tentang simpul, koordinat tekstur, titik normal,atau wajah. Mungkin ada jalur lain untuk hal-hal seperti permukaan melengkung dan komentar juga, tetapi Anda tidak akan membutuhkan itu di sini.
Setiap baris dari file model yang dimulai dengan satu atau dua huruf yang menceritakan
program,untuk apa garis itu. Ada empat jenis prefiks, yang akan dijelaskan di sini:
V: Surat v diikuti oleh spasi adalah simpul plain vanilla. Jika hal ini adalah kasus, berikut sebuah ruang tunggal akan tiga floating-point nilai, masing-masing dipisahkan dengan spasi tunggal juga.
vt: String vt menandakan bahwa baris berisi koordinat tekstur. Setiap koordinat tekstur adalah dua float lagi dipisahkan oleh satu spasi.
vn: vn menandakan titik normal. Selain awalan, baris cermin garis titik: tiga float.
f: f menandakan sebuah wajah. Wajah adalah satu set indeks ke dalam array
simpul, texcoords, dan normals. Namun, hanya simpul indeks harus ada; dua yang lain adalah opsional. Setiap Indeks simpul harus positif. Sebuah nilai negatif di wajah
struktur mungkin berarti file tersebut rusak karena Anda tidak bisa memiliki indeks array negatif. Ini tidak akan benar untuk mengatakan "mengambil obyek kedua negatif, "sehingga Anda jelas tidak bisa mengambil "negatif kedua" simpul baik. Pendekatan terbaik jika Anda menemukan nilai negatif dalam struktur wajah untuk mengabaikan
wajah sama sekali.
Lainnya: Setiap baris prefiks lain seperti g (group), # (komentar), p (titik), l (baris), surfing (permukaan), dan curv (kurva) harus diabaikan untuk saat ini. Meskipun mereka adalah bagian dari format,mereka tidak dibahas di sini.
Sebuah garis khas dalam file obj yang mewakili wajah atau segitiga dan hanya berisi simpul akan terlihat seperti ini:
f 1 2 3
Kode ini mengatakan bahwa wajah menggunakan titik pertama, kedua, dan ketiga indeks untuk menggambar segitiga. Tidak adanya set lain indeks menunjukkan bahwa tekstur koordinat dan titik normals tidak diperlukan.
Jika wajah yang bertekstur, tetapi tidak mengandung titik normals, sintaks akan sama dengan ini:
f 1 / 4 2 / 5 3 / 6
Baris ini mengatakan bahwa segitiga menggunakan simpul 1, 2, dan 3 dan tekstur indeks 4, 5, dan 6.
Namun variasi lain dari garis ini dapat menggunakan semua tiga jenis simpul data koordinat tekstur titik,, dan indeks yang normal. Baris yang akan terlihat seperti:
f 1/4/7 2/5/8 3/6/9
Angka pertama adalah untuk simpul itu sendiri, yang kedua adalah untuk tekstur mengkoordinasikan, dan yang ketiga adalah untuk titik normal.
Hanya ada satu variasi yang lebih: normals vertex dan titik, tetapi tidak ada koordinat tekstur. Ini terlihat seperti ini:
f 1 / / 4 2 / / 5 3 / / 6
Dua garis miring memisahkan angka bukan satu, ini menunjukkan bahwa angka kedua adalah normal simpul, bukan koordinat tekstur.
Kenyataan bahwa wajah tidak perlu berisi semua informasi dapat sangat berguna. Tidak ada alasan sebuah objek yang tidak memerlukan pencahayaan atau texturing harus berisi informasi tersebut. Dengan hanya meninggalkan tidak dibutuhkan informasi di luar, ukuran file berkurang jauh.
Mari kita sekarang beralih ke beberapa kode yang menunjukkan Anda bagaimana untuk memuat file menjadi sesuatu yang bisa anda kerjakan.
Memuat Format OBJ
Karena obj tidak berisi apapun di header, Anda membutuhkan beberapa semacam array resizable untuk memegang simpul Anda, wajah, dan komponen lainnya. Dalam pelaksanaannya ditampilkan di sini, semuanya dimuat ke sebuah STL vektor, semacam array resizable.
Setiap jenis data memiliki struktur tersendiri. Vector3 berisi dua float dan digunakan untuk menyimpan posisi titik tunggal, atau normal vertex. Vector2 jauh seperti saudara yang lebih besar, tetapi memegang hanya dua nilai, cocok untuk koordinat tekstur.
Terakhir dari semua adalah SObjFace, yang berisi 12 bilangan bulat unsigned, tiga untuk
setiap sudut indeks, indeks tekstur coord, dan indeks yang normal. bahkan jika semua variabel wajah tidak selalu digunakan, penyimpanannya masih ada.
Sekarang Anda siap untuk membaca dalam file. Cara terbaik untuk melakukan ini adalah membaca dalam satu baris pada satu waktu, memeriksa awalan, dan ekstrak sisa nilai menggunakan fungsi sscanf. Setiap jenis nilai (data titik, titik yang normal, tekstur mengkoordinasikan, dan wajah) memiliki array sendiri untuk menahannya. Jika loader menemukan baris yang dimulai dengan sesuatu yang tidak menandakan diakui setengah, itu hanya membaca garis dan membuangnya.
Dalam kelas CObj, ada dua nilai Boolean: m_bHasTexCoords dan m_bHasNormals. Variabel ini diatur ke benar jika coord tekstur (untuk m_bHasTexCoords) atau garis normal verteks (untuk m_bHasNormals) ditemukan dalam file. Meskipun hal ini tidak bekerja, ia memiliki beberapa kekurangan. Jika untuk beberapa alasan wajah tidak ada setelah semua titik, loader tidak akan tahu apa jenis wajah untuk membaca dan akan default hanya untuk membaca simpul.
PERHATIAN
Karena format OBJ dapat diprediksi dan juga dapat diedit dengan mudah, akan sangat membantu untuk memiliki beberapa pengecekan error. Misalnya, struktur wajah mungkin referensi simpul yang tidak valid, seperti jumlah titik -2, atau jumlah titik besar dari jumlah total simpul. Untuk menghindari masalah, Anda harus memasukkan beberapa error untuk memeriksa ke dalam kode Anda. Setiap kali Anda memuat nilai, pastikan untuk memeriksa apakah itu sah. Sebagai contoh, tidak ada nomor pada garis wajah harus negatif. Karena mereka adalah indeks ke dalam array, mereka harus positif atau program dapat hancur. Hal yang sama berlaku untuk lebih besar dari jumlah total simpul, tekstur nilai-nilai koordinat, atau normals. Jika wajah referensi simpul luar dari apa yang seharusnya, pilihan terbaik adalah untuk mengabaikan bahwa wajah sepenuhnya. Melakukan hal ini mungkin akan mengakibatkan sebuah lubang dalam model Anda, tetapi sebuah lubang kecil akan terlihat lebih baik daripada tonjolan jelek jika Anda mencoba untuk menebak apa indeks apa yang seharusnya.
Hal ini dapat menyebabkan hasil yang tidak diharapkan seperti hilang atau cacat geometri,
atau bahkan model tidak muncul sama sekali. Jika ini terjadi,pemecahan termudah adalah dengan hanya membuka file dan memindahkan informasi simpul yang bagian atas file. Namun, untuk tujuan pembelajaran dan loading yang OBJs paling umum, ini seharusnya tidak menjadi masalah.
Ketika Anda turun ke face data, anda hanya melihat dua variabel dan mengatur parameter sscanf anda tepat.
Setelah anda memiliki semua data yang dikumpulkan dan disimpan, ada beberapa lagi
hal yang harus Anda lakukan sebelum render. Jika Anda melihat pada kelas,Anda akan melihat bahwa ada pointer untuk semua jenis, serta vektor resizable. Ada alasan yang sangat bagus untuk ini.
Cara termudah untuk mengakses elemen dari sebuah vektor STL adalah melalui operator [] seperti yang Anda lakukan dengan array standar. Namun, metode ini dapat cukup lambat dan tidak dianjurkan, terutama jika Anda perlu menggunakannya setiap kali anda membuat satu frame, seperti halnya dengan format OBJ.
Solusi untuk ini adalah hanya mengatur pointer ke elemen pertama dalam STL vektor. Ini tidak menyebabkan masalah karena STL vektor dijamin akan terus-menerus.Sekarang semua data Anda sudah terorganisir, Anda dapat mulai khawatir tentang render.
RENDERING OBJ
Mari kita lihat apa yang dapat Anda lakukan tentang hal ini pada layar. Jika Anda beralih ke CObj ini:: Render () fungsi dalam obj.cpp, Anda akan melihat apa yang diperlukan untuk mendapatkan segalanya pada layar. Hal pertama yang dilakukan adalah untuk mengaktifkan dan mengikat tekstur. Pastikan untuk memeriksa apakah tekstur berlaku sebelum memanggil untuk menghindari masalah.
Kemudian Anda bisa mulai rendering. Hal pertama yang terjadi adalah ia akan mengecek untuk melihat komponen yang termasuk dalam model dan memilih loop didasarkan pada hasil. Ada loop terpisah untuk setiap kombinasi yang mungkin,untuk meningkatkan kecepatan. Dalam pseudo-kode, kode render akan terlihat seperti kode berikut. Perlu diingat pseudo-kode hanya memberi Anda tata letak dasar tentang bagaimana fungsi akan terlihat. Ini harus jelas bahwa kode berikut tidak akan mengkompilasi dalam C reguler / C + + compiler.
for(each vertex)
if(normals are present)
SendNormal();
if(texcoords are present)
SendtexCoord();
SendVertex()
Itu akan memerlukan dua pernyataan if untuk setiap titik, yang merupakan sisa waktu prosesor ketika Anda dapat lakukan dengan pasangan tetapi untuk setiap frame.Sebaliknya, strukturnya lebih seperti ini:
if(has normals and tex coords)
for(each vertex)
SendNormal()
SendTexCoord()
SendVertex()
else if(has texcoords but not normals)
for(each vertex)
SendTexCoords()
SendVertex();
TIP
Karena geometri adalah statis, Anda mungkin ingin mempertimbangkan kompilasi semua kode Anda untuk menampilkan daftar list. Sebuah daftar tampilan menciptakan objek dikompilasi dan akan mengurangi waktu pemrosesan yang diperlukan untuk setiap frame. Hal ini dapat dilakukan pada saat membuka di OpenGL menggunakan glGenList fungsi dan glNewList. Kemudian, didalam rending fungsi anda, daripada mengirim setiap simpul ke renderer, Anda cukup menjalankan glCallList dengan tepat menampilkan daftar untuk menampilkan model Anda.
Dan seterusnya. Meskipun pendekatan ini lebih panjang, jauh lebih efisien. Untuk mendapatkan nilai yang sesuai untuk masing-masing komponen, Anda menggunakan struktur wajah indeks ke dalam array normals, tex coords, dan simpul. Ada satu kekhasan kecil di sini. Namun untuk beberapa alasan,pencipta dari format OBJ memutuskan untuk membuat 1 indeks pertama,bukan dari 0. Untuk mengatasi ini, Anda harus mengurangkan 1 dari masing-masing titik,tekstur koordinat, dan titik yang normal indeks yang membentuk wajah.
Hal ini dilakukan pada saat membuka dalam kode demo, lihat konstruktor dari SObjFace untuk informasi lebih lanjut. Selamat bersenang-senang.
Untuk lebih jelasnya,lihat model sepenuhnya yang ditunjukkan dalam Gambar 4.1.
TIP
OBJ format sebenarnya memiliki lebih banyak format untuk ditawarkan. hal ini dapat mendukung beberapa jenis permukaan melengkung, wajah yang telah lebih dari tiga sisi, dan hal menarik lainnya. Jika Anda merasa ambisius, coba memodifikasi loader untuk bekerja dengan semua hal-hal ekstra. Ada dokumen lengkap Obj di seluruh Internet. Cukup ketik Format OBJ dipencarian. Beberapa link yang bisa dijadikan bahan antara lain http://astronomy.swin.edu.au/ ~ pbourke / geomformats / obj / dan http://www.royriggs.com/obj.html. Keduanya berisi deskripsi dari format file obj; URL pertama mencakup Format penuh, termasuk garis, titik, permukaan, dan kurva.
Gambar 4.1 Model OBJ lentera jin . Model khusus ini termasuk simpul saja. Untuk lebih jelasnya buka di sini di wireframe. Model ini dibuat oleh John Spirko (http://www.iaw.on.ca/ ~ jspirko / galleries.htm) dan ditemukan di 3D Model Dunia (http://www.3dmodelworld.com). Pastikan untuk melihat kedua situs tersebut untuk model lainnya.
KESIMPULAN
Kesimpulan dari bab ini. Meskipun format OBJ dasar cukup sederhana, konsep-konsep dari bab ini dapat digunakan untuk hal lain di ASCII berbasis format Anda mungkin menemukan, seperti ASE dan ASC. Bab berikutnya membahas beberapa informasi lebih lanjut dengan pengenalan kerangka animasi. Dalam bab berikut, Anda akan melihat bagaimana kerangka animasi telah mengubah dunia game dan belajar tentang beberapa permainan yang sudah menggunakannya. Anda juga akan belajar bagaimana kerangka
animasi bekerja, dan alasan mengapa Anda mungkin ingin menggunakan itu dalam permainan berikutnya.
sebuah pengantar untuk rangka informasi
Memahami Rangka Animasi
berisi animasi kerangka! Revolusioner kerangka animasi
sistem! Animasi realistis! Lihatlah hampir semua game 3D baru yang
kotak kata-kata ini, atau beberapa bentuk dari mereka, melompat ke kanan keluar pada Anda. Ini
tampaknya bahwa setiap permainan baru menggunakan beberapa bentuk animasi tulang.
Anda mungkin telah melihat animasi kerangka dalam tindakan; permainan seperti
Half-Life, Unreal Tournament seri, Soldier of Fortune II, dan Doom3
semua menggunakan animasi kerangka dalam satu bentuk atau lain. Gambar 5.1 menunjukkan salah satu permainan pertama yang membawa animasi kerangka ke komputer rumah
MEMAHAMI KERANGKA ANIMASI
Animasi rangka adalah penggunaan "tulang" untuk menghidupkan model daripada
mengedit dan memindahkan setiap sudut atau wajah secara manual. Setiap simpul terpasang
ke tulang (atau dalam beberapa kasus beberapa tulang). Sebuah tulang atau root
hanya titik kontrol untuk sekelompok simpul. Ini adalah serupa dalam
konsep untuk root di tubuh kita rootri, seperti lutut kami atau pergelangan tangan. Ketika bergerak tulang, setiap simpul melekat bergerak juga, seperti
ditunjukkan pada Gambar 5.2. Bahkan gerakan tulang itu rootri dapat menyebabkan
perubahan tulang lainnya. Ini membantu naikkan model tepat,
karena gerakan di salah satu bagian dari tubuh mempengaruhi bagian lain dari
tubuh, seperti dalam kehidupan nyata. Akibatnya, programmer dituntut untuk bekerja
dengan tulang untuk menghitung transformasi untuk simpul individu.
Meskipun hal ini dapat bekerja lebih, hasilnya pasti bagus.
KEUNTUNGAN KERANGKA ANIMASI
Animasi kerangka memiliki banyak keuntungan dibandingkan simpul tradisional animasi, yang Anda lihat dalam bab-bab sebelumnya. Yang pertama, dan paling terlihat pemain permainan realisme meningkat. Karakter animasi Skeletally cenderung bergerak jauh lebih realistis, dan sering muncul untuk berinteraksi lebih baik dengan lingkungan sekitar mereka daripada model tradisional. Model Alasan cenderung bergerak lebih realistis jika mereka skeletally animasi sederhana. Dalam animasi keyframe tradisional,permainan akan interpolasi linear antara dua pose. Namun, dalam kasus ini, root tidak benar-benar memutar, yang dapat menjadi masalah karena organisme hidup bergerak dalam cara rotasi.
Tidak cukup sebagai nyata pada pengguna, tetapi sangat penting bagi programmer,
adalah bahwa animasi seperti mengambil lebih sedikit ruang penyimpanan. Bukan menyimpan satu set baru simpul untuk setiap frame, semua yang perlu disimpan adalah rotasi dan terjemahan tulang. Itu bisa mencapai yang besar tabungan, bahkan setelah Anda menambahkan penyimpanan meningkat awal tulang dan titik-tulang Informasi lampiran.
Ini sedikit tambahan ruang penyimpanan dapat digunakan untuk menyimpan lebih rinci Model, menambahkan frame animasi tambahan, atau bahkan hanya dibiarkan untuk bagian lain dari permainan yang Anda ingin meningkatkan. Anda bisa menambahkan lebih detail untuk permainan dunia, meningkatkan A.I. untuk menyediakan permainan yang lebih menarik, atau bahkan menambahkan beberapa tambahan keren atau telur Paskah yang Anda tidak akan tambah sebaliknya, karena kekhawatiran ruang.
Namun keuntungan lain terletak pada seniman yang membuat konten 3D untuk
permainan Anda. Sebuah sistem animasi yang baik akan memotong kerangka waktu para seniman perlu untuk menghidupkan model mereka. Hampir setiap program animasi yang bagus menggunakan animasi sudah kerangka untuk memastikan transisi yang mulus dari model dari para seniman untuk programmer, untuk permainan, dan akhirnya ke pemain. Ini mempercepat penciptaan konten untuk permainan, dan memastikan bahwa tidak ada animasi atau fitur yang hilang ketika model yang diekspor ke format apapun permainan Anda menggunakan.
Keuntungan keempat adalah satu lagi untuk programmer (itu hanya akan yang lebih baik dan lebih baik, bukan?). Karena sifat tulang, itu adalah mungkin untuk memposisikan mereka secara real-waktu jika Anda ingin, memungkinkan diperlukan animasi yang akan dibuat selama runtime. Hal ini memberikan jauh lebih beragam perpustakaan animasi mungkin. Anda bahkan dapat membiarkan mengendalikan permainan cara tubuh bertindak ketika bertabrakan dengan objek, atau slide ke bawah kemiringan. Ini jenis teknologi yang baru saja datang ke dalam bermain, terkenal contoh yang Unreal Tournament 2003 Fisika sistem (http://
www.epicgames.com). Karakter dan model bereaksi secara realistis dengan lingkungan, termasuk meluncur menuruni lereng dan mengalungkan di tepi.
Kerugian satu adalah bahwa animasi skeletal bisa lebih sulit untuk memahami dan menerapkan dari animasi keyframed tradisional.
Bab ini akan membantu Anda meringankan ketakutan apapun yang mungkin Anda miliki tentang kerangka animasi.
Bagian dalam rangka kerja animasi
Lihatlah lengan Anda. Memperpanjang ekstremitas keluar di depan Anda dan lihatlah dalam hal itu. Lengan Anda memiliki beberapa tulang, dua yang utama, dan banyak yang lebih dalam tangan dan jari Anda.
Gerakkan jari-jari Anda di sekitar, hanya jari-jari Anda bergerak ke kanan? Dengan bergerak Anda jari, tidak ada bagian lain dari lengan Anda, atau dalam hal ini, setiap bagian lain dari tubuh Anda bergerak dengan itu. Sekarang tekuk siku Anda. Tidak hanya lengan Anda bergerak, tetapi jari-jari dan tangan Anda bergerak ke atas juga. Jika mereka tidak Anda lengan akan menjadi terputus dari tangan dan jari, dan mereka akan dibiarkan tergantung di sana di udara; pikiran yang tidak cantik.
Bagaimana latihan lengan sedikit berhubungan dengan animasi tulang? Nah,
lengan Anda merupakan bagian dari model 3D, jari-jari Anda, tangan, lebih rendah dan lengan atas semua potongan model ini. Berbagai root dan tulang jalankan
melalui lengan Anda, dengan root di bahu, siku, pergelangan tangan, dan jari.
Ini menunjukkan Anda bahwa ketika Anda memindahkan tulang "jauh sampai" di lengan Anda, segala sesuatu di bawah bergerak juga. Ini adalah salah satu konsep yang paling dasar animasi kerangka.
Keindahan ini adalah bahwa hal itu memungkinkan Anda untuk memindahkan tulang apapun dalam model, dan filter gerakan bawah garis, menerapkannya pada segala sesuatu di bawah asal gerakan. Hal ini memungkinkan Anda untuk memindahkan bahu karakter, misalnya, tanpa perlu khawatir tentang mendapatkan
siku dan tangan di tempat yang tepat. Anda dapat yakin bahwa mereka akan otomatis akan diperbarui juga. Gambar 5.3 menunjukkan beberapa contoh root dan simpul yang menyertainya.Root root adalah root utama dalam model. Setiap root lainnya akhirnya menemukan jalan kembali ke root ini satu. Setiap operasi yang dilakukan pada root akar, apakah mereka akan terjemahan atau rotasi, mempengaruhi setiap verteks dalam model. Anda dapat menganggap root root sebagai root yang mengontrol semua root lainnya. Dengan hanya memodifikasi root root, Anda bisa membuat karakter berjalan tegak, atau Anda bisa memutar begitu dia terbalik dan membiarkan dia berjalan di langit-langit-semua dengan panggilan tunggal.
Hanya ada satu akar bersama di masing-masing model, dan tidak memiliki root orangtua.
Root root umumnya berada di tempat di mana tulang banyak yang datang
bersama, namun di tempat di mana animasi sedikit dibutuhkan. contohini meliputi bagian tengah dan punggung bawah. Tapi tidak ada yang menentukan persis di mana root akar harus terletak di dalam sebuah model, melainkan dapat berbeda untuk setiap model jika Anda inginkan. Gambar 5.4 menunjukkan apa akan terjadi untuk model jika Anda memodifikasi posisi dan orientasi dari root akar.
Induk dan Anak Root
Root dapat memiliki orang tua dan root anak. Induk dari root mempengaruhi
semua yang dilakukannya. Rotasi induk dan terjemahan ini diambil ke account ketika menghitung posisi baru root saat ini. Menggunakan analogi lengan lagi, root siku akan menjadi induk dari tangan bersama. Pindah siku mempengaruhi tangan. Dalam implementasi sederhana animasi kerangka, setiap root hanya memiliki satu root orang tua, jika memiliki sama sekali.
Namun, root root dapat memiliki banyak anak. Sebuah root anak sebaliknya
pada root induk. Segala sesuatu yang Anda lakukan untuk bersama orang tua akan menyaring ke dalam root anak. Cara lain untuk melihat ini adalah bahwa bersama saat ini adalah induk untuk semua root di bawahnya.
Keyframes dalam rangka Animasi
Seperti kunci berbingkai animasi yang menyimpan beberapa salinan simpul, sistem animasi tulang juga memiliki keyframes. ingat bahwa keyframes adalah snapshot dari posisi model. Namun, daripada setiap keyframe berisi salinan rootri dari
simpul, animasi keyframe kerangka atau boneframe mengandung transformasi,
baik rotasi dan translasi, umumnya dalam bentuk X, Y, Z nilai untuk terjemahan, dan tiga nilai yang mengandung rotasi di sekitar X, Y, dan sumbu Z, masing-masing. Sama seperti dengan keyframes dhuwur biasa, ini boneframes harus diinterpolasi untuk memberikan hasil yang halus.
Nilai-nilai posisi atau penerjemahan dapat interpolasi linear antara, sama seperti Anda telah melakukan dengan simpul di pasar tradisional animasi. Rotasi menimbulkan masalah. Cukup disisipkan antara mereka seperti yang Anda lakukan dengan nilai-nilai terjemahan dapat menyebabkan aneh efek. Rotasi tidak akan mulus, tetapi akan mempercepat dan memperlambat tergantung pada lokasi. Jika perbedaan rotasi besar,
Model mungkin muncul untuk "cairan" seperti benjolan dari gelatin. Hal ini karena
bila menggunakan interpolasi linier, semuanya akan diinterpolasi sepanjang garis lurus. Hal ini dapat menyebabkan efek aneh jika dilakukan dengan rotasi karena rotasi dimaksudkan untuk diinterpolasi sepanjang busur bukan garis. Memotong lurus melintasi busur daripada mengikuti hal itu menyebabkan "cairan" efek.
Cara terbaik untuk berkeliling ini adalah dengan menggunakan quaternions. Seperti yang Anda pelajari dalam Bab 2, "Pengantar Quaternions," salah satu yang terbesar keuntungan dari quaternions adalah bahwa mereka dapat diinterpolasi dengan mudah. Tidak hanya bisa mereka dengan mudah diinterpolasi, mereka dapat dengan mudah bola linear diinterpolasi.
Interpolasi linier Bulat interpolates antara dua titik pada permukaan bola. Namun, daripada memotong langsung dari satu sampai interpolasi, lainnya linier bola mengikuti permukaan bola. Anda dapat memvisualisasikan ini dengan mengambil sebuah bola bundar, seperti basket, dan penandaan dua poin di atasnya. Kemudian, dengan menggunakan jari Anda, menemukan jalur terpendek antara dua titik. Karena jari Anda tidak bisa pergi di dalam bola, jalur yang dihasilkan antara dua poin akan busur.
Ini adalah apa SLERP tidak. Menggunakan fungsi SLERP, rotasi dapat diinterpolasi sepanjang busur, menciptakan mulus bagus, mata-efek menyenangkan.
Mengambil posisi
Interpolasi linier Bulat interpolates antara dua titik pada permukaan bola. Namun, daripada memotong langsung dari satu sampai interpolasi, lainnya linier bola mengikuti permukaan bola. Anda dapat memvisualisasikan ini dengan mengambil sebuah bola bundar, seperti basket, dan penandaan dua poin di atasnya. Kemudian, dengan menggunakan jari Anda, menemukan jalur terpendek antara dua titik. Karena jari Anda tidak bisa pergi di dalam bola, jalur yang dihasilkan antara dua poin akan busur.
Ini adalah apa SLERP tidak. Menggunakan fungsi SLERP, rotasi dapat diinterpolasi sepanjang busur, menciptakan mulus bagus, mata-efek menyenangkan.
Bagian ini membahas tentang bagaimana mengubah ini sehingga root bekerja
bersama-sama. Hal pertama yang Anda lakukan adalah membangun sebuah matriks transformasi untuk setiap titik menggunakan data dari arus rotasi dan translasi keyframes. Sebuah matriks transformasi dapat dibangun dengan pertama-tama menghasilkan matriks dan matriks rotasi tiga terjemahan seperti yang ditunjukkan dalam Bab 1.
Mengalikan bersama tiga akan menghasilkan transformasi akhir matriks. Atau Anda dapat menggunakan SetRotation dan SetTranslation fungsi dalam kelas matriks untuk menghindari harus membangun dan berkembang biak matriks rootri. Matriks ini disebut matriks relatif.
Selanjutnya, Anda perlu menghitung apa yang disebut matriks absolut. mutlak
matriks adalah matriks relatif root absolut dikalikan dengan induknya
matriks. Matriks transformasi absolut memberitahu Anda mutlak root.
Ini termasuk transformasi relatif, serta semua transformasi setiap root sebelum dalam hirarki telah dibuat. Hal ini yang memungkinkan root untuk bergerak lainnya sebagai akibat dari bergerak bersama jauh sampai di baris. Pertimbangkan, misalnya, bagaimana siku Anda bergerak ketika Anda bergerak bahu Anda. Hal ini menimbulkan pertanyaan: bagaimana Anda menghitung
Dunia yang dihasilkan matriks posisi segala sesuatu sehingga ketika tulang berikutnya ditarik, transformasi dari root orangtua dipertimbangkan.
Sebagai contoh, pinggul karakter dapat diputar tertentu jumlah. Karena root lutut dan pergelangan kaki adalah anak-anak dari pinggul bersama, mereka juga akan diputar.
Fungsi rekursif menggambar begitu, seperti setiap root ditarik, itu panggilan yang
menggambar fungsi anak-anaknya. Setiap anak panggilan rendering fungsi dari anak-anaknya, dan sebagainya. Hanya ketika bersama terminal mencapai (satu dengan tidak ada anak), adalah matriks tumpukan ulang menggunakan perintah seperti glPopMatrix. Misalnya, ketika menggambar kaki dari karakter, matriks baru dapat mendorong pada stack untuk lutut, sudut, dan kaki root. Tetapi ketika saatnya untuk mulai pada lengan, Anda ingin untuk pop kembali ke posisi semula. Jika tidak, setiap kali Anda pindah kaki, lengan akan bergerak juga.
Menempelkan Mesh
Ketika anda lancar dengan root, sekarang saatnya untuk melampirkan mesh.
Mesh adalah apa yang membentuk bentuk model. Ini adalah sekelompok
simpul dan segitiga yang membantu model memiliki volume dan detail.
Tanpa mesh, model skeletally animasi hanya akan menjadi kerangka. Setiap simpul jaring menyimpan indeks ke dalam array bersama untuk menandakan
yang terpasang pada tulang tertentu. Sekarang, cara root disimpan menentukan metode transformasi dan rendering simpul tersebut.
Jika root yang disimpan dengan indeks masing-masing memiliki induknya, dan Anda memiliki sudah pergi melalui dan menghitung matriks mutlak akhir, melampirkan mesh sederhana. Setiap simpul harus diubah oleh patungan yang
mutlak matriks. Pastikan untuk menyimpan verteks Anda diubah dalam khusus
tempat, jangan menimpa Anda simpul asli. Hal ini dilakukan karena dalam
format yang paling, yang boneframes tidak kumulatif. Setiap frame menyimpan
rotasi dan translasi pada root tertentu dari titik awal. Jika Anda tidak kembali ke simpul asli ketika menghitung verteks baru posisi setiap waktu, model ini akan bekerja tidak konsisten.
Sekarang Anda mungkin berpikir untuk diri sendiri, "baik, saya bisa menghidupkan simpul model, tapi bagaimana dengan segitiga, normals, dan koordinat tekstur "?
Ini adalah di mana animasi kerangka benar-benar mulai bersinar. Setiap Model hanya berisi satu set koordinat tekstur dan informasi segitiga.
Hanya karena posisi simpul perubahan tidak berarti indeks segitiga dan koordinat tekstur harus. Ini berarti Anda tidak perlu khawatir tentang mereka setelah Anda mengaturnya.
Normals adalah cerita lain. Karena orientasi poligon dan simpul perubahan, sehingga akan normals. Jika Anda hanya menggunakan wajah normals, Anda perlu menghitung ulang secara manual setiap frame sebelumnya mengirim mereka ke penyaji. Namun, jika Anda dihitung verteks normals di awal, Anda sedang beruntung. Normals Vertex tidak memiliki harus benar-benar dihitung kembali setelah transformasi. Mereka dapat ditransformasikan oleh matriks sama dengan simpul tersebut. Satu-satunya perbedaan di sini adalah bahwa Anda tidak mengambil dalam terjemahan akun. Menggunakan Transform3 () fungsi dari kelas matriks akan memutar titik yang normal Anda, sementara masih mempertahankan besarnya aslinya. Jika root menyimpan indeks anak dan Anda mendorong arus
matriks transformasi ke stack menggunakan glPushMatrix, render model Anda menjadi sangat mudah. Dalam hal ini, tidak perlu mengubah setiap titik sebelum menampilkan itu. Tidak ada perubahan yang diperlukan untuk rendering apa pun. Segala sesuatu yang Anda membuat sekarang akan berubah benar, bahkan wajah normals. Isu lain yang perlu dipertimbangkan adalah bagaimana simpul yang melekat pada lebih dari satu tulang. Dalam hal ini, setiap tulang
Demo
Demo pada bab ini memungkinkan Anda untuk melihat hubungan antara orang tua
dan anak root, dan melihat apa yang terjadi ketika root individu dimanipulasi, seperti yang ditunjukkan pada Gambar 5.9.
Demo memungkinkan Anda untuk memilih dari salah satu dari empat root dan memodifikasi nya rotasi dan penerjemahan nilai-nilai. Nilai-nilai baru pada gilirannya mempengaruhi root yang jauh di bawah garis (root anak). Dengan memanipulasi yang berbeda root, Anda dapat melihat efek dari tindakan Anda pada semua root lain.
Angka-angka root, dari atas layar ke bawah, sebagai berikut: 1,0, 2, 3. Bersama 1 dan 3 merupakan root terminal. Mereka adalah tepat pada ujung"model" dan bergerak baik dari mereka akan memiliki efek pada root lainnya dalam model.
Bersama 2 adalah induk dari 3 root. Mengubah nilai-nilai ini menyebabkan root
bersama 3 untuk bergerak juga: mencoba dan melihat. Akhirnya, root root 0 adalah akar.
Apa pun yang Anda lakukan untuk bersama ini akan mempengaruhi setiap root lain pada layar.
Demo Kontrol
Di sisi kiri layar, Anda akan melihat kotak dialog berisi berbagai kontrol dan kotak teks, seperti yang ditunjukkan pada Gambar 5.10.
Gambar 5.9 Sebuah demo animasi kecil sederhana kerangka. Anda dapat memutar dan menerjemahkan
individu root, menggunakan panel kontrol di sebelah kiri, dan melihat efeknya pada root lainnya.
Gambar 5.10 Panel kontrol memungkinkan Anda untuk mengontrol posisi dan
rotasi setiap root. Memilih root dari tombol pada bagian atas kotak kontrol, dan kemudian menggunakan panah atas dan bawah pada kotak kontrol memungkinkan Anda untuk menerjemahkan dan memutar root dalam model.
Tombol radio pada bagian paling atas dari kotak dialog kontrol pilih root Anda ingin memodifikasi.
Di bawah tombol radio enam mengedit kotak. Kotak-kotak ini memungkinkan
Anda untuk mengubah orientasi dari root yang dipilih. Set atas kotak mengubah rotasi root di sekitar X, Y, dan sumbu Z, sedangkan set X berubah bawah objek, Y, dan Z penerjemahan.
Di bawah kotak-kotak adalah satu set hanya-baca mengedit kotak. kotak-kotak ini
berisi angka empat rotasi setara dan matriks transformasi yang akan digunakan untuk mengubah setiap simpul terhubung ke root. Bersama Induk kotak kecil berlabel menampilkan orang tua root saat ini.
Demo menyenangkan untuk menulis dan dapat menghibur untuk bermain dengan. Perhatikan dengan seksama untuk melihat bagaimana tindakan Anda mempengaruhi root-root lain di TKP. Pastikan untuk memeriksa bantuan pada layar ketika Anda pertama kali menjalankan program. Membantu akan ditampilkan pada layar ketika Anda pertama kali mulai dan dapat toggled dan mematikan dengan menekan H.
TIP
Meskipun Anda dapat menerjemahkan root dalam animasi rangka, maka
umumnya terbaik untuk tetap dengan rotasi. Jika Anda berpikir tentang itu, pada tubuh Anda rootri, tidak ada perubahan root Anda pernah posisi, bersama lebih tinggi-up hanya berputar. Misalnya, jika anda menggerakkan tangan Anda menjauh dari tubuh Anda, Anda tidak menerjemahkan tangan, Anda memutar siku sebagai gantinya. Para tubuh manusia tidak memiliki pelengkap telescoping,
sehingga hampir 100% dari gerakan dapat dilakukan dalam hal rotasi, bukan terjemahan.
Satu-satunya pengecualian untuk aturan ini bersama akar. Menerjemahkan root root akan memindahkan seluruh model, yang berguna jika Anda ingin mengubah posisi sebenarnya dari model dalam animasi. Anda akan menggunakan ini jika
Anda perlu model Anda untuk mengubah posisi selama animasi, seperti untuk berjalan maju. Namun, secara umum terbaik untuk membiarkan permainan mengurus bergerak model di seluruh dunia. Ini berarti bahwa semua model yang perlu berjalan atau berlari animasi akan berjalan dan berlari "dalam
tempat ". Game ini akan menambahkan dalam maju atau mundur Gerakan kemudian.
Aplikasi Lanjutan rangka Animasi
Itu cukup banyak wraps up pengantar untuk animasi kerangka. Tapi sebelum Anda pergi, melihat beberapa cool stuff yang dapat dilakukan dengan lebih maju teknik, di luar cakupan buku ini.
Gambar 5.11 menunjukkan tembakan dari Epic itu Unreal Tournament 2003. Unreal Turnamen 2003 adalah salah satu permainan pertama yang menerapkan yang baik "Ragdoll" sistem. Dalam sistem Ragdoll, tubuh berubah sesuai dengan mereka lingkungan. Sebagai contoh, ketika seseorang terbunuh dalam permainan sementara berdiri di atas bukit, tubuh mereka tidak tetap berbaring dalam garis lurus seperti yang umum dalam banyak permainan penembak lainnya. Sebaliknya, tubuh slide menuruni bukit dengan cara realistis, terpental dan meluncur saat mengikuti orientasi medan. Metode animasi menambahkan banyak realisme dan believability permainan apapun.
Gambar 5.11 Unreal Tournament 2003 yang Ragdoll sistem dalam tindakan. Perhatikan bagaimana
tirai tubuh rootri sekitar lubang, seperti manusia nyata.
Kesimpulan
Ini menyimpulkan pengenalan Anda untuk animasi kerangka. Mudah-mudahan Anda memiliki pemahaman tentang bagaimana animasi kerangka bekerja dan mengapa banyak permainan yang mulai menggunakannya.
Beberapa bab berikutnya akan menggunakan informasi ini sebagai Anda mulai belajar tentang format yang menggunakan animasi rangka untuk animasi. Anda akan dapat melihat langsung gerakan, kelancaran cairan model dan mulai
menghargai ide di balik animasi kerangka. Bab berikutnya mencakup format 3D Milkshape, juga dikenal sebagai MS3D. Hal ini dibuat oleh seorang editor shareware, juga disebut 3D Milkshape. Dirilis oleh penulisnya sebagai shareware, itu dengan cepat menjadi salah satu terpanas alat untuk pengembang game independen mana-mana. nya rendah harga, kemampuan untuk model output untuk berbagai permainan dan program, dan upgrade melalui plug-in telah dengan cepat berhasil menjadi favorit di antara seniman dan programmer sama. Baca terus untuk mengetahui tentang format ini menarik dan berguna.
berisi animasi kerangka! Revolusioner kerangka animasi
sistem! Animasi realistis! Lihatlah hampir semua game 3D baru yang
kotak kata-kata ini, atau beberapa bentuk dari mereka, melompat ke kanan keluar pada Anda. Ini
tampaknya bahwa setiap permainan baru menggunakan beberapa bentuk animasi tulang.
Anda mungkin telah melihat animasi kerangka dalam tindakan; permainan seperti
Half-Life, Unreal Tournament seri, Soldier of Fortune II, dan Doom3
semua menggunakan animasi kerangka dalam satu bentuk atau lain. Gambar 5.1 menunjukkan salah satu permainan pertama yang membawa animasi kerangka ke komputer rumah
MEMAHAMI KERANGKA ANIMASI
Animasi rangka adalah penggunaan "tulang" untuk menghidupkan model daripada
mengedit dan memindahkan setiap sudut atau wajah secara manual. Setiap simpul terpasang
ke tulang (atau dalam beberapa kasus beberapa tulang). Sebuah tulang atau root
hanya titik kontrol untuk sekelompok simpul. Ini adalah serupa dalam
konsep untuk root di tubuh kita rootri, seperti lutut kami atau pergelangan tangan. Ketika bergerak tulang, setiap simpul melekat bergerak juga, seperti
ditunjukkan pada Gambar 5.2. Bahkan gerakan tulang itu rootri dapat menyebabkan
perubahan tulang lainnya. Ini membantu naikkan model tepat,
karena gerakan di salah satu bagian dari tubuh mempengaruhi bagian lain dari
tubuh, seperti dalam kehidupan nyata. Akibatnya, programmer dituntut untuk bekerja
dengan tulang untuk menghitung transformasi untuk simpul individu.
Meskipun hal ini dapat bekerja lebih, hasilnya pasti bagus.
KEUNTUNGAN KERANGKA ANIMASI
Animasi kerangka memiliki banyak keuntungan dibandingkan simpul tradisional animasi, yang Anda lihat dalam bab-bab sebelumnya. Yang pertama, dan paling terlihat pemain permainan realisme meningkat. Karakter animasi Skeletally cenderung bergerak jauh lebih realistis, dan sering muncul untuk berinteraksi lebih baik dengan lingkungan sekitar mereka daripada model tradisional. Model Alasan cenderung bergerak lebih realistis jika mereka skeletally animasi sederhana. Dalam animasi keyframe tradisional,permainan akan interpolasi linear antara dua pose. Namun, dalam kasus ini, root tidak benar-benar memutar, yang dapat menjadi masalah karena organisme hidup bergerak dalam cara rotasi.
Tidak cukup sebagai nyata pada pengguna, tetapi sangat penting bagi programmer,
adalah bahwa animasi seperti mengambil lebih sedikit ruang penyimpanan. Bukan menyimpan satu set baru simpul untuk setiap frame, semua yang perlu disimpan adalah rotasi dan terjemahan tulang. Itu bisa mencapai yang besar tabungan, bahkan setelah Anda menambahkan penyimpanan meningkat awal tulang dan titik-tulang Informasi lampiran.
Ini sedikit tambahan ruang penyimpanan dapat digunakan untuk menyimpan lebih rinci Model, menambahkan frame animasi tambahan, atau bahkan hanya dibiarkan untuk bagian lain dari permainan yang Anda ingin meningkatkan. Anda bisa menambahkan lebih detail untuk permainan dunia, meningkatkan A.I. untuk menyediakan permainan yang lebih menarik, atau bahkan menambahkan beberapa tambahan keren atau telur Paskah yang Anda tidak akan tambah sebaliknya, karena kekhawatiran ruang.
Namun keuntungan lain terletak pada seniman yang membuat konten 3D untuk
permainan Anda. Sebuah sistem animasi yang baik akan memotong kerangka waktu para seniman perlu untuk menghidupkan model mereka. Hampir setiap program animasi yang bagus menggunakan animasi sudah kerangka untuk memastikan transisi yang mulus dari model dari para seniman untuk programmer, untuk permainan, dan akhirnya ke pemain. Ini mempercepat penciptaan konten untuk permainan, dan memastikan bahwa tidak ada animasi atau fitur yang hilang ketika model yang diekspor ke format apapun permainan Anda menggunakan.
Keuntungan keempat adalah satu lagi untuk programmer (itu hanya akan yang lebih baik dan lebih baik, bukan?). Karena sifat tulang, itu adalah mungkin untuk memposisikan mereka secara real-waktu jika Anda ingin, memungkinkan diperlukan animasi yang akan dibuat selama runtime. Hal ini memberikan jauh lebih beragam perpustakaan animasi mungkin. Anda bahkan dapat membiarkan mengendalikan permainan cara tubuh bertindak ketika bertabrakan dengan objek, atau slide ke bawah kemiringan. Ini jenis teknologi yang baru saja datang ke dalam bermain, terkenal contoh yang Unreal Tournament 2003 Fisika sistem (http://
www.epicgames.com). Karakter dan model bereaksi secara realistis dengan lingkungan, termasuk meluncur menuruni lereng dan mengalungkan di tepi.
Kerugian satu adalah bahwa animasi skeletal bisa lebih sulit untuk memahami dan menerapkan dari animasi keyframed tradisional.
Bab ini akan membantu Anda meringankan ketakutan apapun yang mungkin Anda miliki tentang kerangka animasi.
Bagian dalam rangka kerja animasi
Lihatlah lengan Anda. Memperpanjang ekstremitas keluar di depan Anda dan lihatlah dalam hal itu. Lengan Anda memiliki beberapa tulang, dua yang utama, dan banyak yang lebih dalam tangan dan jari Anda.
Gerakkan jari-jari Anda di sekitar, hanya jari-jari Anda bergerak ke kanan? Dengan bergerak Anda jari, tidak ada bagian lain dari lengan Anda, atau dalam hal ini, setiap bagian lain dari tubuh Anda bergerak dengan itu. Sekarang tekuk siku Anda. Tidak hanya lengan Anda bergerak, tetapi jari-jari dan tangan Anda bergerak ke atas juga. Jika mereka tidak Anda lengan akan menjadi terputus dari tangan dan jari, dan mereka akan dibiarkan tergantung di sana di udara; pikiran yang tidak cantik.
Bagaimana latihan lengan sedikit berhubungan dengan animasi tulang? Nah,
lengan Anda merupakan bagian dari model 3D, jari-jari Anda, tangan, lebih rendah dan lengan atas semua potongan model ini. Berbagai root dan tulang jalankan
melalui lengan Anda, dengan root di bahu, siku, pergelangan tangan, dan jari.
Ini menunjukkan Anda bahwa ketika Anda memindahkan tulang "jauh sampai" di lengan Anda, segala sesuatu di bawah bergerak juga. Ini adalah salah satu konsep yang paling dasar animasi kerangka.
Keindahan ini adalah bahwa hal itu memungkinkan Anda untuk memindahkan tulang apapun dalam model, dan filter gerakan bawah garis, menerapkannya pada segala sesuatu di bawah asal gerakan. Hal ini memungkinkan Anda untuk memindahkan bahu karakter, misalnya, tanpa perlu khawatir tentang mendapatkan
siku dan tangan di tempat yang tepat. Anda dapat yakin bahwa mereka akan otomatis akan diperbarui juga. Gambar 5.3 menunjukkan beberapa contoh root dan simpul yang menyertainya.Root root adalah root utama dalam model. Setiap root lainnya akhirnya menemukan jalan kembali ke root ini satu. Setiap operasi yang dilakukan pada root akar, apakah mereka akan terjemahan atau rotasi, mempengaruhi setiap verteks dalam model. Anda dapat menganggap root root sebagai root yang mengontrol semua root lainnya. Dengan hanya memodifikasi root root, Anda bisa membuat karakter berjalan tegak, atau Anda bisa memutar begitu dia terbalik dan membiarkan dia berjalan di langit-langit-semua dengan panggilan tunggal.
Hanya ada satu akar bersama di masing-masing model, dan tidak memiliki root orangtua.
Root root umumnya berada di tempat di mana tulang banyak yang datang
bersama, namun di tempat di mana animasi sedikit dibutuhkan. contohini meliputi bagian tengah dan punggung bawah. Tapi tidak ada yang menentukan persis di mana root akar harus terletak di dalam sebuah model, melainkan dapat berbeda untuk setiap model jika Anda inginkan. Gambar 5.4 menunjukkan apa akan terjadi untuk model jika Anda memodifikasi posisi dan orientasi dari root akar.
Induk dan Anak Root
Root dapat memiliki orang tua dan root anak. Induk dari root mempengaruhi
semua yang dilakukannya. Rotasi induk dan terjemahan ini diambil ke account ketika menghitung posisi baru root saat ini. Menggunakan analogi lengan lagi, root siku akan menjadi induk dari tangan bersama. Pindah siku mempengaruhi tangan. Dalam implementasi sederhana animasi kerangka, setiap root hanya memiliki satu root orang tua, jika memiliki sama sekali.
Namun, root root dapat memiliki banyak anak. Sebuah root anak sebaliknya
pada root induk. Segala sesuatu yang Anda lakukan untuk bersama orang tua akan menyaring ke dalam root anak. Cara lain untuk melihat ini adalah bahwa bersama saat ini adalah induk untuk semua root di bawahnya.
Keyframes dalam rangka Animasi
Seperti kunci berbingkai animasi yang menyimpan beberapa salinan simpul, sistem animasi tulang juga memiliki keyframes. ingat bahwa keyframes adalah snapshot dari posisi model. Namun, daripada setiap keyframe berisi salinan rootri dari
simpul, animasi keyframe kerangka atau boneframe mengandung transformasi,
baik rotasi dan translasi, umumnya dalam bentuk X, Y, Z nilai untuk terjemahan, dan tiga nilai yang mengandung rotasi di sekitar X, Y, dan sumbu Z, masing-masing. Sama seperti dengan keyframes dhuwur biasa, ini boneframes harus diinterpolasi untuk memberikan hasil yang halus.
Nilai-nilai posisi atau penerjemahan dapat interpolasi linear antara, sama seperti Anda telah melakukan dengan simpul di pasar tradisional animasi. Rotasi menimbulkan masalah. Cukup disisipkan antara mereka seperti yang Anda lakukan dengan nilai-nilai terjemahan dapat menyebabkan aneh efek. Rotasi tidak akan mulus, tetapi akan mempercepat dan memperlambat tergantung pada lokasi. Jika perbedaan rotasi besar,
Model mungkin muncul untuk "cairan" seperti benjolan dari gelatin. Hal ini karena
bila menggunakan interpolasi linier, semuanya akan diinterpolasi sepanjang garis lurus. Hal ini dapat menyebabkan efek aneh jika dilakukan dengan rotasi karena rotasi dimaksudkan untuk diinterpolasi sepanjang busur bukan garis. Memotong lurus melintasi busur daripada mengikuti hal itu menyebabkan "cairan" efek.
Cara terbaik untuk berkeliling ini adalah dengan menggunakan quaternions. Seperti yang Anda pelajari dalam Bab 2, "Pengantar Quaternions," salah satu yang terbesar keuntungan dari quaternions adalah bahwa mereka dapat diinterpolasi dengan mudah. Tidak hanya bisa mereka dengan mudah diinterpolasi, mereka dapat dengan mudah bola linear diinterpolasi.
Interpolasi linier Bulat interpolates antara dua titik pada permukaan bola. Namun, daripada memotong langsung dari satu sampai interpolasi, lainnya linier bola mengikuti permukaan bola. Anda dapat memvisualisasikan ini dengan mengambil sebuah bola bundar, seperti basket, dan penandaan dua poin di atasnya. Kemudian, dengan menggunakan jari Anda, menemukan jalur terpendek antara dua titik. Karena jari Anda tidak bisa pergi di dalam bola, jalur yang dihasilkan antara dua poin akan busur.
Ini adalah apa SLERP tidak. Menggunakan fungsi SLERP, rotasi dapat diinterpolasi sepanjang busur, menciptakan mulus bagus, mata-efek menyenangkan.
Mengambil posisi
Interpolasi linier Bulat interpolates antara dua titik pada permukaan bola. Namun, daripada memotong langsung dari satu sampai interpolasi, lainnya linier bola mengikuti permukaan bola. Anda dapat memvisualisasikan ini dengan mengambil sebuah bola bundar, seperti basket, dan penandaan dua poin di atasnya. Kemudian, dengan menggunakan jari Anda, menemukan jalur terpendek antara dua titik. Karena jari Anda tidak bisa pergi di dalam bola, jalur yang dihasilkan antara dua poin akan busur.
Ini adalah apa SLERP tidak. Menggunakan fungsi SLERP, rotasi dapat diinterpolasi sepanjang busur, menciptakan mulus bagus, mata-efek menyenangkan.
Bagian ini membahas tentang bagaimana mengubah ini sehingga root bekerja
bersama-sama. Hal pertama yang Anda lakukan adalah membangun sebuah matriks transformasi untuk setiap titik menggunakan data dari arus rotasi dan translasi keyframes. Sebuah matriks transformasi dapat dibangun dengan pertama-tama menghasilkan matriks dan matriks rotasi tiga terjemahan seperti yang ditunjukkan dalam Bab 1.
Mengalikan bersama tiga akan menghasilkan transformasi akhir matriks. Atau Anda dapat menggunakan SetRotation dan SetTranslation fungsi dalam kelas matriks untuk menghindari harus membangun dan berkembang biak matriks rootri. Matriks ini disebut matriks relatif.
Selanjutnya, Anda perlu menghitung apa yang disebut matriks absolut. mutlak
matriks adalah matriks relatif root absolut dikalikan dengan induknya
matriks. Matriks transformasi absolut memberitahu Anda mutlak root.
Ini termasuk transformasi relatif, serta semua transformasi setiap root sebelum dalam hirarki telah dibuat. Hal ini yang memungkinkan root untuk bergerak lainnya sebagai akibat dari bergerak bersama jauh sampai di baris. Pertimbangkan, misalnya, bagaimana siku Anda bergerak ketika Anda bergerak bahu Anda. Hal ini menimbulkan pertanyaan: bagaimana Anda menghitung
Dunia yang dihasilkan matriks posisi segala sesuatu sehingga ketika tulang berikutnya ditarik, transformasi dari root orangtua dipertimbangkan.
Sebagai contoh, pinggul karakter dapat diputar tertentu jumlah. Karena root lutut dan pergelangan kaki adalah anak-anak dari pinggul bersama, mereka juga akan diputar.
Fungsi rekursif menggambar begitu, seperti setiap root ditarik, itu panggilan yang
menggambar fungsi anak-anaknya. Setiap anak panggilan rendering fungsi dari anak-anaknya, dan sebagainya. Hanya ketika bersama terminal mencapai (satu dengan tidak ada anak), adalah matriks tumpukan ulang menggunakan perintah seperti glPopMatrix. Misalnya, ketika menggambar kaki dari karakter, matriks baru dapat mendorong pada stack untuk lutut, sudut, dan kaki root. Tetapi ketika saatnya untuk mulai pada lengan, Anda ingin untuk pop kembali ke posisi semula. Jika tidak, setiap kali Anda pindah kaki, lengan akan bergerak juga.
Menempelkan Mesh
Ketika anda lancar dengan root, sekarang saatnya untuk melampirkan mesh.
Mesh adalah apa yang membentuk bentuk model. Ini adalah sekelompok
simpul dan segitiga yang membantu model memiliki volume dan detail.
Tanpa mesh, model skeletally animasi hanya akan menjadi kerangka. Setiap simpul jaring menyimpan indeks ke dalam array bersama untuk menandakan
yang terpasang pada tulang tertentu. Sekarang, cara root disimpan menentukan metode transformasi dan rendering simpul tersebut.
Jika root yang disimpan dengan indeks masing-masing memiliki induknya, dan Anda memiliki sudah pergi melalui dan menghitung matriks mutlak akhir, melampirkan mesh sederhana. Setiap simpul harus diubah oleh patungan yang
mutlak matriks. Pastikan untuk menyimpan verteks Anda diubah dalam khusus
tempat, jangan menimpa Anda simpul asli. Hal ini dilakukan karena dalam
format yang paling, yang boneframes tidak kumulatif. Setiap frame menyimpan
rotasi dan translasi pada root tertentu dari titik awal. Jika Anda tidak kembali ke simpul asli ketika menghitung verteks baru posisi setiap waktu, model ini akan bekerja tidak konsisten.
Sekarang Anda mungkin berpikir untuk diri sendiri, "baik, saya bisa menghidupkan simpul model, tapi bagaimana dengan segitiga, normals, dan koordinat tekstur "?
Ini adalah di mana animasi kerangka benar-benar mulai bersinar. Setiap Model hanya berisi satu set koordinat tekstur dan informasi segitiga.
Hanya karena posisi simpul perubahan tidak berarti indeks segitiga dan koordinat tekstur harus. Ini berarti Anda tidak perlu khawatir tentang mereka setelah Anda mengaturnya.
Normals adalah cerita lain. Karena orientasi poligon dan simpul perubahan, sehingga akan normals. Jika Anda hanya menggunakan wajah normals, Anda perlu menghitung ulang secara manual setiap frame sebelumnya mengirim mereka ke penyaji. Namun, jika Anda dihitung verteks normals di awal, Anda sedang beruntung. Normals Vertex tidak memiliki harus benar-benar dihitung kembali setelah transformasi. Mereka dapat ditransformasikan oleh matriks sama dengan simpul tersebut. Satu-satunya perbedaan di sini adalah bahwa Anda tidak mengambil dalam terjemahan akun. Menggunakan Transform3 () fungsi dari kelas matriks akan memutar titik yang normal Anda, sementara masih mempertahankan besarnya aslinya. Jika root menyimpan indeks anak dan Anda mendorong arus
matriks transformasi ke stack menggunakan glPushMatrix, render model Anda menjadi sangat mudah. Dalam hal ini, tidak perlu mengubah setiap titik sebelum menampilkan itu. Tidak ada perubahan yang diperlukan untuk rendering apa pun. Segala sesuatu yang Anda membuat sekarang akan berubah benar, bahkan wajah normals. Isu lain yang perlu dipertimbangkan adalah bagaimana simpul yang melekat pada lebih dari satu tulang. Dalam hal ini, setiap tulang
Demo
Demo pada bab ini memungkinkan Anda untuk melihat hubungan antara orang tua
dan anak root, dan melihat apa yang terjadi ketika root individu dimanipulasi, seperti yang ditunjukkan pada Gambar 5.9.
Demo memungkinkan Anda untuk memilih dari salah satu dari empat root dan memodifikasi nya rotasi dan penerjemahan nilai-nilai. Nilai-nilai baru pada gilirannya mempengaruhi root yang jauh di bawah garis (root anak). Dengan memanipulasi yang berbeda root, Anda dapat melihat efek dari tindakan Anda pada semua root lain.
Angka-angka root, dari atas layar ke bawah, sebagai berikut: 1,0, 2, 3. Bersama 1 dan 3 merupakan root terminal. Mereka adalah tepat pada ujung"model" dan bergerak baik dari mereka akan memiliki efek pada root lainnya dalam model.
Bersama 2 adalah induk dari 3 root. Mengubah nilai-nilai ini menyebabkan root
bersama 3 untuk bergerak juga: mencoba dan melihat. Akhirnya, root root 0 adalah akar.
Apa pun yang Anda lakukan untuk bersama ini akan mempengaruhi setiap root lain pada layar.
Demo Kontrol
Di sisi kiri layar, Anda akan melihat kotak dialog berisi berbagai kontrol dan kotak teks, seperti yang ditunjukkan pada Gambar 5.10.
Gambar 5.9 Sebuah demo animasi kecil sederhana kerangka. Anda dapat memutar dan menerjemahkan
individu root, menggunakan panel kontrol di sebelah kiri, dan melihat efeknya pada root lainnya.
Gambar 5.10 Panel kontrol memungkinkan Anda untuk mengontrol posisi dan
rotasi setiap root. Memilih root dari tombol pada bagian atas kotak kontrol, dan kemudian menggunakan panah atas dan bawah pada kotak kontrol memungkinkan Anda untuk menerjemahkan dan memutar root dalam model.
Tombol radio pada bagian paling atas dari kotak dialog kontrol pilih root Anda ingin memodifikasi.
Di bawah tombol radio enam mengedit kotak. Kotak-kotak ini memungkinkan
Anda untuk mengubah orientasi dari root yang dipilih. Set atas kotak mengubah rotasi root di sekitar X, Y, dan sumbu Z, sedangkan set X berubah bawah objek, Y, dan Z penerjemahan.
Di bawah kotak-kotak adalah satu set hanya-baca mengedit kotak. kotak-kotak ini
berisi angka empat rotasi setara dan matriks transformasi yang akan digunakan untuk mengubah setiap simpul terhubung ke root. Bersama Induk kotak kecil berlabel menampilkan orang tua root saat ini.
Demo menyenangkan untuk menulis dan dapat menghibur untuk bermain dengan. Perhatikan dengan seksama untuk melihat bagaimana tindakan Anda mempengaruhi root-root lain di TKP. Pastikan untuk memeriksa bantuan pada layar ketika Anda pertama kali menjalankan program. Membantu akan ditampilkan pada layar ketika Anda pertama kali mulai dan dapat toggled dan mematikan dengan menekan H.
TIP
Meskipun Anda dapat menerjemahkan root dalam animasi rangka, maka
umumnya terbaik untuk tetap dengan rotasi. Jika Anda berpikir tentang itu, pada tubuh Anda rootri, tidak ada perubahan root Anda pernah posisi, bersama lebih tinggi-up hanya berputar. Misalnya, jika anda menggerakkan tangan Anda menjauh dari tubuh Anda, Anda tidak menerjemahkan tangan, Anda memutar siku sebagai gantinya. Para tubuh manusia tidak memiliki pelengkap telescoping,
sehingga hampir 100% dari gerakan dapat dilakukan dalam hal rotasi, bukan terjemahan.
Satu-satunya pengecualian untuk aturan ini bersama akar. Menerjemahkan root root akan memindahkan seluruh model, yang berguna jika Anda ingin mengubah posisi sebenarnya dari model dalam animasi. Anda akan menggunakan ini jika
Anda perlu model Anda untuk mengubah posisi selama animasi, seperti untuk berjalan maju. Namun, secara umum terbaik untuk membiarkan permainan mengurus bergerak model di seluruh dunia. Ini berarti bahwa semua model yang perlu berjalan atau berlari animasi akan berjalan dan berlari "dalam
tempat ". Game ini akan menambahkan dalam maju atau mundur Gerakan kemudian.
Aplikasi Lanjutan rangka Animasi
Itu cukup banyak wraps up pengantar untuk animasi kerangka. Tapi sebelum Anda pergi, melihat beberapa cool stuff yang dapat dilakukan dengan lebih maju teknik, di luar cakupan buku ini.
Gambar 5.11 menunjukkan tembakan dari Epic itu Unreal Tournament 2003. Unreal Turnamen 2003 adalah salah satu permainan pertama yang menerapkan yang baik "Ragdoll" sistem. Dalam sistem Ragdoll, tubuh berubah sesuai dengan mereka lingkungan. Sebagai contoh, ketika seseorang terbunuh dalam permainan sementara berdiri di atas bukit, tubuh mereka tidak tetap berbaring dalam garis lurus seperti yang umum dalam banyak permainan penembak lainnya. Sebaliknya, tubuh slide menuruni bukit dengan cara realistis, terpental dan meluncur saat mengikuti orientasi medan. Metode animasi menambahkan banyak realisme dan believability permainan apapun.
Gambar 5.11 Unreal Tournament 2003 yang Ragdoll sistem dalam tindakan. Perhatikan bagaimana
tirai tubuh rootri sekitar lubang, seperti manusia nyata.
Kesimpulan
Ini menyimpulkan pengenalan Anda untuk animasi kerangka. Mudah-mudahan Anda memiliki pemahaman tentang bagaimana animasi kerangka bekerja dan mengapa banyak permainan yang mulai menggunakannya.
Beberapa bab berikutnya akan menggunakan informasi ini sebagai Anda mulai belajar tentang format yang menggunakan animasi rangka untuk animasi. Anda akan dapat melihat langsung gerakan, kelancaran cairan model dan mulai
menghargai ide di balik animasi kerangka. Bab berikutnya mencakup format 3D Milkshape, juga dikenal sebagai MS3D. Hal ini dibuat oleh seorang editor shareware, juga disebut 3D Milkshape. Dirilis oleh penulisnya sebagai shareware, itu dengan cepat menjadi salah satu terpanas alat untuk pengembang game independen mana-mana. nya rendah harga, kemampuan untuk model output untuk berbagai permainan dan program, dan upgrade melalui plug-in telah dengan cepat berhasil menjadi favorit di antara seniman dan programmer sama. Baca terus untuk mengetahui tentang format ini menarik dan berguna.
Langganan:
Postingan (Atom)