Pertanyaan yang cukup sederhana: Matematika apa yang harus dipahami oleh semua programmer game agar bisa sukses?
Saya tidak secara khusus berbicara tentang merender matematika atau apa pun di bidang khusus pemrograman game, lebih khusus hanya hal-hal yang bahkan harus diketahui oleh programmer game, dan jika tidak, mereka mungkin akan menganggapnya berguna.
Catatan: karena tidak ada satu jawaban yang benar , pertanyaan ini (dan jawabannya) adalah wiki komunitas.
Juga, jika Anda ingin persamaan matematika lateks mewah, jangan ragu untuk menggunakan http://mathurl.com/ .
Jawaban:
Ada banyak bentuk matematika lain yang berguna, tetapi paling tidak Anda harus tahu ini:
Ini sangat mendasar, tetapi jika Anda tidak mengetahuinya, Anda tidak akan memiliki kesempatan untuk menjadi seorang programmer apalagi pengembang game.
Objek dalam dunia game diwakili dengan vektor. Vektor mewakili hal-hal seperti posisi objek, melihat arah, dan kecepatan. Perhitungan matematika vektor seperti Dot Product , Cross Product , dan normalisasi vektor sangat penting.
Bagaimana cara memindahkan objek game saya? Pemula mungkin berkata:
"Aku tahu! Aku hanya akan melakukan:"
object.position.x++
.Tidak tidak Tidak. Anda harus menggunakan perhitungan vektor. Objek membutuhkan posisi, arah dan vektor percepatan yang dapat Anda gunakan untuk memindahkan objek. Jika Anda melakukan hal pemula, Anda akan terjebak dalam kekacauan yang tidak dapat dipelihara, dan bagaimana Anda membuatnya bergerak ke arah yang tidak selaras dengan sumbu XYZ dunia?
Alasan utama game menggunakan angka empat adalah karena mereka mewakili rotasi hampir seefisien ruang seperti sudut Euler, tanpa menderita kunci Gimbal . Gimbal Lock dimulai ketika sudut Euler mencapai rotasi 90 derajat di sekitar sumbu apa pun: Anda segera kehilangan derajat kebebasan. Kuartal mengatasi masalah ini dengan menambahkan dimensi keempat. Jika Anda terjebak dengan sudut Euler, Anda harus membatasi satu sumbu untuk tidak pernah memutar lebih dari ~ 89 derajat.
Jika Anda akan memprogram matematika untuk respons fisika dalam sebuah game, maka mengambil kelas fisika tidak akan menjadi ide yang buruk.
Alasan mengapa Anda perlu mengetahui persamaan fisika:
Jika Anda menggunakan mesin fisika (atau mesin gim yang memiliki inbuilt mesin fisika) maka Anda dapat mengetahui sedikit tentang fisika. Tetap saja, cukup baik untuk mengetahui kapan Anda perlu membuat tangan Anda kotor karena mesin fisika tidak berkinerja baik.
sumber
Saya memimpikan hari ketika pengembangan game didorong data sebagai produksi seni. Saya tidak melihatnya di mana pun di cakrawala jadi untuk sekarang mengetahui beberapa matematika tampaknya menjadi kebutuhan.
Matematika itu seperti teknik, semakin banyak semakin baik, selama Anda bisa menerapkannya.
Inilah urutan kepentingan yang saya lihat.
Saya bisa terus berjalan. Semakin Anda tahu lebih baik, tetapi belajar banyak matematika tidak berarti Anda akan membuat permainan yang hebat, tetapi itu bisa membantu.
sumber
Yang sangat mendasar adalah teorema Pythagoras. Juga dikenal sebagai rumus jarak.
a
danb
merupakan tepi segitiga siku-siku danc
merupakan sisi miringnya. Ini berarti bahwa untuk menemukan panjang vektor, Anda melakukan ini:Catatan lain yang menarik adalah bahwa jika Anda hanya membandingkan jarak, Anda tidak harus mengambil akar kuadrat (yang bisa relatif mahal). Itu sebabnya sebagian besar kerangka kerja memiliki fungsi "kuadrat jarak" atau "kuadrat panjang" untuk vektor mereka.
sumber
sqrt(V dot V)
panjangnya. Jadi, jarak antara dua titik adalah:sqrt((A-B) dot (A-B))
Bahkan jika Anda bukan The Graphics Guy, Anda akan menggunakan vektor vektor dan matematika 80% dari waktu. Mereka adalah bawang dari bolognese kami yang menyenangkan.
sumber
Sebuah pemahaman yang kuat tentang
+
,-
,*
, dan/
. Tanpa mereka, Anda benar-benar kacau.sumber
Ya, pemrograman game cenderung sangat intensif matematika. Matematika apa yang Anda butuhkan tergantung pada apa yang sedang Anda kerjakan. Aritmatika dasar adalah suatu keharusan, tentu saja, sama seperti dalam semua pemrograman. Lebih dari itu:
Geometri sangat penting untuk setiap pekerjaan grafis. Jika Anda ingin menampilkan hal-hal di layar, Anda perlu memahami sistem koordinat. Dan jika Anda ingin memindahkan mereka dalam apa pun kecuali arah mata angin, Anda akan benar-benar hilang tanpa pemahaman yang kuat tentang sinus, cosinus dan vektor (trigonometri dasar). Dan jika Anda perlu bekerja dalam 3D, persyaratan geometri dan trigonometri menjadi jauh lebih rumit.
Jika Anda ingin memodelkan segala jenis fisika realistis jarak jauh, Anda perlu kalkulus untuk itu. (Itulah yang mendorong Newton untuk menciptakan kalkulus, setelah semua.)
Segala macam perhitungan probabilitas memerlukan pengetahuan statistik dan teori probabilitas untuk mendapatkan hasil yang waras tanpa jumlah trial and error yang gila.
Mungkin ada lebih banyak, tetapi itulah yang terlintas di benak saya.
sumber
s=u.t + a.t.t/2
. Anda perlu trigonometri untuk mendapatkan kecepatan awal (u).Paling tidak Anda butuhkan.
Anda juga ingin memiliki setidaknya pengetahuan operasional vektor, dan Anda ingin tahu apa itu Matrix dan apa yang bisa digunakan untuk itu, walaupun detailnya tidak perlu benar-benar diperlukan.
Jika Anda ingin masuk ke pemrograman grafik, Anda akan membutuhkan lebih banyak pengetahuan matematika, tetapi melakukan pemrograman gameplay umum tidak harus terlalu intensif matematika.
sumber
Sistem penomoran biner dan heksadesimal , dan bagaimana mengubahnya menjadi / dari angka desimal.
Meskipun Anda umumnya tidak perlu bekerja dengan angka-angka Biner mentah , mereka sering digunakan untuk variabel Bendera, yang memerlukan logika boolean dan bit-shifting.
Hex tidak begitu penting (kecuali jika Anda ingin memproses 0xDEADBEEF ), tetapi minimal, Anda ingin mengenali kapan mereka digunakan, dan mengapa.
sumber
Boolean
danbinary
bercampur. Tidak yakin itu mutlak diperlukan untuk pemrograman game.Tidak menyebutkan matematika dasar pemrograman komputer? Teori grafik, teori bilangan, teori himpunan, dan matematika konkret, biasanya semua disatukan menjadi kelas yang menyakitkan dan kurang diajarkan yang disebut "matematika diskrit" di universitas.
"Trik bit bodoh" menghemat setiap jenis waktu program (dan biasanya juga setara dengan beberapa trik string dan trik set), tipe grafik dan traversal digunakan di semua tempat (bahkan jika Anda hanya memilih wadah STL), dan kompleksitas algoritmik adalah kunci untuk optimasi ketika bahasa mencapai tingkat yang lebih tinggi.
sumber
Saya pikir matriks hasil adalah alat yang sangat penting. Permainan seringkali lebih menyenangkan ketika mereka mendekati keseimbangan jumlah wajar yang sama, dan matriks imbalan membantu Anda menghitungnya dalam kasus rumit. Saya kira artikel wikipedia ini sebagus apapun, dan mendapatkan konsep dasar yang diperlukan di: http://en.wikipedia.org/wiki/Normal-form_game
sumber
Memahami produk titik: Jika dua vektor memiliki arah yang sama, (theta <90 deg), maka produk titik adalah positif, atau yang lain, negatif. Ini dapat digunakan untuk menguji setiap kali pemain terlihat (dengan asumsi FOV adalah 90 derajat)
Dan menggeneralisasi game 2D Anda ke dimensi yang lebih tinggi. (gunakan perhitungan vektor)
Jika Anda dapat menerapkan mesin 3D sendiri, Anda siap melakukannya.
sumber
Itu tergantung pada apa yang Anda lakukan .
Semua programmer game harus tahu setidaknya aljabar sekolah menengah. Itu berarti:
Pemrogram grafik Anda harus tahu:
Pemrogram fisika Anda harus tahu:
sumber
Selain sinus dan cosinus (yang 50-75% programmer yang saya temui tidak tahu cara menggunakannya), pelajari fungsi arc-tan ajaib dan bagaimana bisa digunakan untuk mendapatkan sudut vektor apa pun.
sumber
atan2
karena ini menangani kuadran dengan sendirinya.Saya terkejut bahwa tidak ada yang menyebutkan Quaternions . Saya tidak punya banyak pengalaman dengan mesin yang berbeda tetapi setidaknya JME menggunakannya di mana-mana dan saya mendapat kesan bahwa mereka adalah konsep yang cukup penting.
sumber
Membuat game berarti membawa kehidupan "nyata" ke realitas virtual. Lebih baik tahu lebih banyak tentang dunia nyata / alam semesta daripada lebih sedikit :) .. Matematika hanyalah alat. Dan jika Anda membuat rencana, Anda harus meluangkan waktu untuk belajar dalam rencana juga.
Diedit: Saya melihat beberapa kesalahpahaman :) .. Saya berpikir bahwa serangkaian perolehan matematika apa yang Anda perlu atur, tergantung pada hal-hal konkret yang ingin Anda gambarkan. Tidak ada yang tahu segalanya. Dan cara yang lebih baik untuk melakukannya adalah. Bukan untuk mempelajari segala sesuatu di awal, tetapi belajar sepotong kecil, gunakan, pelajari, gunakan dll. Kemudian Anda dapat melakukannya selama pengembangan, jika Anda memiliki rencana yang baik.
sumber
Jawaban sederhana: BANYAK!
Jawaban terinci:
Aljabar Aritmatika, Dasar & Linier, dalam kebanyakan kasus Trig, jika Anda membuat game 3D, Kalkulus PASTI, dan Fisika (Fisika membutuhkan Kalkulus)!
sumber