Saya baru mengenal pemrograman dan pemrograman game. Saya sudah membaca sesuatu tentang vektor dan matematika, tetapi saya punya pertanyaan - di mana saya bisa menggunakan vektor dalam pemrograman game? Mungkin ada yang bisa memberikan contoh sederhana di mana Anda menggunakan vektor (dalam 2D)?
Saya telah menemukan contoh tetapi kebanyakan mereka berada di konsol tempat mereka menampilkan angka, dan contoh besar yang saya tidak mengerti.
class Star
siniPoint2D
digunakan diclass ResizeRectangle
Jawaban:
Apa itu vektor?
Vektor adalah sekumpulan koordinat dari berbagai dimensi. Setiap koordinat dalam suatu vektor mewakili suatu posisi absolut dalam arah ruang dari vektor tersebut.
Perhatikan bahwa dalam semua kasus, kami telah memberi makna pada vektor untuk masalah kami. Meskipun Anda biasanya akan menemukan vektor yang digunakan untuk geometri dalam gim, tidak ada alasan Anda tidak dapat melakukan hal lain dengannya.
Mengapa saya menggunakan vektor?
Pertama, Anda tidak perlu menggunakan vektor. Selama Anda melacak x dan y, atau koordinat apa pun yang Anda pedulikan, dalam beberapa hal Anda baik-baik saja.
Namun, keuntungan menggunakan vektor adalah bahwa mereka secara rapi mewakili hal-hal seperti arah dan posisi, dan juga memiliki beberapa operasi matematika yang ditetapkan pada mereka yang membuat hidup Anda lebih mudah.
Untuk contoh sederhana ini, pertimbangkan produk titik .
Misalkan Anda memiliki sistem radar dalam permainan gaya top-down. Setiap musuh yang muncul di sektor radar (beberapa wedge berbentuk pie dalam 2D) harus mendapatkan titik merah kecil di layar Anda. Jadi, Anda perlu mencari tahu musuh apa yang ada di bagian radar Anda.
Anda bisa menguji apakah musuh ada di dalam segitiga. Anda juga bisa menguji apakah musuh terkandung di persimpangan dua setengah ruang dari pesawat / garis yang mendefinisikan dua sisi sektor radar.
Atau, Anda bisa menggunakan produk titik untuk melakukan pemeriksaan. Begini caranya:
Ini sangat berguna, dan juga sekarang memungkinkan Anda dengan mudah memiliki radar yang mengarah ke arah yang berbeda (cukup ubah vektor maju) dan memiliki lebar yang berbeda (cukup ubah sudut lebar radar) - dan Anda dapat menggunakan kembali kode yang sama untuk kasus-kasus tersebut juga !
Kenapa lagi saya menggunakan vektor?
Jika Anda menggunakan 2D, mungkin cara terbaik untuk mencapai efek dan gerakan kompleks (pemintalan, penskalaan, dll.) Adalah dengan menggunakan grafik adegan. Sebuah planet memiliki kapal yang mengorbit, kapal memiliki pesawat tanpa awak yang mengorbit. Perhitungan untuk ini tanpa menggunakan vektor matematika benar-benar jelek.
Dengan matematika vektor, kami mewakili masing-masing sebagai memiliki titik dan matriks transformasi 3x3. Planet menggunakan transformasinya, kapal menggunakan transformasinya dan transformasi planet, dan drone menggunakan transformasinya dan transformasi kapal serta transformasi planet.
Ketika planet ini bergerak, Anda mengubah transformasinya, dan kapal serta drone secara otomatis diposisikan "gratis". Kode yang jauh lebih bersih.
Masih belum yakin. Vektor juga merupakan representasi asli untuk posisi, geometri, dan gerak yang digunakan oleh hampir semua perpustakaan grafis - dan tentunya OpenGL dan DirectX. Anda tidak mungkin pergi tanpa harus menggunakannya.
Kesimpulan Vektor adalah alat yang ampuh untuk menulis kode yang jelas yang memecahkan masalah geometri dengan bersih dan elegan.
sumber
Contoh 2D adalah koordinat layar, ini mengidentifikasi piksel pada layar dan memiliki komponen x- dan y [x, y] yaitu posisi layar kiri atas [0, 0]
Contoh lain: Bayangkan sebuah teks bergulir dari batas layar kanan ke batas layar kiri. Sekarang Anda perlu menentukan kecepatan teks gulir dalam pixel per detik, yaitu [-20, 0] yang berarti teks menggulir 20 piksel ke kiri per detik dan tidak pernah mengubah ketinggian.
Contoh lain yang lebih canggih: Bayangkan sebuah game 2D yang seharusnya berjalan pada resolusi layar yang berbeda 800x600, 1024x768 dll. Ini dapat dengan mudah dilakukan dengan internal menggunakan lebar layar dari 0,0 hingga 1,0 dan tinggi dari 0,0 hingga 1,0 untuk memisahkan logika permainan dari resolusi layar aktual. Sekarang ketika Anda menggambar ke layar Anda hanya mengalikan vektor internal dengan vektor resolusi:
perhatikan, ketiga variabel adalah vektor 2D di sini, mereka memiliki komponen x dan komponen y, yaitu untuk internal_pos ini [0,5, 0,25]:
Jadi posisi internal [0,5, 0,25] ditransformasikan ke posisi layar aktual [400, 150]
Ini adalah hal dasar. Keuntungan sebenarnya dari vektor adalah aplikasi dalam Aljabar Linier di mana Anda dapat menggunakan matriks untuk mengubah simpul Anda (memutar, skala, cermin dll), yaitu untuk dengan mudah memutar semua posisi internal Anda hingga 90 derajat, atau Anda harus menukar layar-y posisi 0 dari atas ke bawah layar, karena ie perpustakaan pihak ketiga yang Anda gunakan, menggunakan konvensi ini.
sumber
screen_pos = internal_pos * screen_resolution
ini tidak berkoordinasi invarian cara yang telah ditulis, itu bisa lebih tepat ditulisscreen_pos = map_to_screen * internal_pos
, di manamap_to_screen
adalah pemetaan linear (yang dapat ditulis sebagai matriks, dalam hal ini satu diagonal).Berikut adalah penjelasan yang bagus tentang vektor dalam pengembangan game di blog Wolfire Games:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
sumber
Vektor adalah entitas yang memiliki nilai dan arah. Contoh vektor dalam dunia nyata dan permainan berbasis fisika termasuk kecepatan dan momentum. Properti yang hanya memiliki nilai tetapi tidak memiliki arah disebut skalar dan termasuk lokasi, massa, kepadatan, dan sebagainya.
Vektor diperlukan untuk gim yang meniru sifat fisik seperti vektor (seperti yang disebutkan - kecepatan, akselerasi, dan sebagainya). Matematika yang digunakan untuk perhitungan vektor disebut aljabar linier .
sumber
Di mana pun Anda memiliki angka untuk setiap dimensi untuk mewakili sesuatu, koleksi angka-angka ini dapat dianggap sebagai vektor. Posisi, kecepatan dan percepatan adalah contoh utama vektor. Dalam beberapa kasus dapat juga praktis untuk mewakili arah menghadap sebagai vektor.
Untuk hal-hal dasar, tidak masalah apakah Anda menganggap angka-angka ini sebagai vektor, tetapi jika Anda ingin melakukan segala jenis fisika, Anda harus melihat ke dalam matematika vektor.
sumber
Sederhananya, apa pun dengan posisi, atau arah, yang ada di mana-mana dalam game mereka menggunakan vektor. Vektor seperti sebuah titik
Namun perbedaannya benar-benar turun ke ini. Titik hanyalah titik, sedangkan vektor adalah panah.
jika Anda memiliki
perkataan Anda yang saya maksud di lokasi ini x 5 dan y 10.
namun ketika Anda mendeklarasikan vektor ...
Anda benar-benar mengatakan saya menyatakan panah dari 0,0 ke x 5, y 10;
Anda bahkan dapat memiliki titik dari mana vektor Anda menunjuk dari menjadi titik dalam ruang dari mana saja, misalnya mari kita gunakan titik dan vektor untuk memindahkan objek kita, kita akan menggunakan Point2 untuk menyimpan lokasi dan vektor2 untuk memindahkannya .
sekarang Anda dapat menggunakan vektor untuk memindahkan titik ini, katakanlah kita ingin memindahkan titik ini ke sumbu x 10 unit sehingga Anda miliki
sekarang titik telah pindah ke tempat panah vektor Anda mengatakannya.
titik sekarang adalah
Satu hal terakhir yang perlu diperhatikan adalah terkadang vektor digunakan seperti titik dan sebaliknya hanya karena mereka memegang jenis data yang sama.
sumber
v = pos - origin
jadiv != pos
karena asal adalah sebuah titik{0, 0, 0, 1}