Bir oyun motorunu geliştirmek için bir programcının bilmesi gereken belirli matematik, fizik, AI ve genel kavramlar nelerdir? [kapalı]


9

Web ve DB merkezli uygulamaların programcısı olarak, listeler, ağaçlar, grafikler vb. Veri yapıları hakkında bilgi sahibiyim. neredeyse tüm temel işlevlerin yerleşik olduğu müşteri odaklı çerçevelerle çalıştı. C, PHP, Java, HTML, PL / SQL ve MySQL biliyorum. Şu anda Python öğreniyorum.

Oyun geliştirmeye başlamak istiyorum. Yeni başlayanlar için oyun geliştirmeye yönelik öneriler, ipuçları ve yaklaşımlarla ilgili başka sorular gördüm. Bu noktayı anlıyorum ve cevapları açık. Gönderdikten birkaç gün sonra Motorları Değil , Oyun Yazın makalesini okudum ve bir oyun motoru oluşturmadan önce bir oyun uygulamam gerektiğini fark ettim. Yine de sorularım var.

Amacım

  • Veri yapısı algoritmalarını, matematik ve fizik kavramlarını kullanmak da dahil olmak üzere temel düzey programlama becerilerimi geliştirin.
  • Temel seviye kodlamasında kendinizi şımartmak için iyi bir oyun motoru uygulayın.
  • Yapay zeka araştırma alanına girebilmek için.

Bir programcının bir oyun motoru geliştirmek için bilmesi gereken belirli matematik, fizik, AI ve genel kavramlar nelerdir?

Yanıtlar:


11

Veri Yapıları: Bu kesinlikle geçerli bir soru. Bununla birlikte, bazı Veri Yapıları herhangi bir Oyun türü için (daha önce bahsettikleriniz, Listeler, Ağaçlar ... gibi) yararlı olsa da, çok spesifik olan başkaları da vardır. Örneğin, Octrees 3D Programlamada çok yararlı olabilir, ancak saf bir 2D ortamda muhtemelen bunlara ihtiyacınız olmayacaktır.

Algoritmalar : Aynı kural geçerlidir. Örnek, saf bir 2D ortamda, Çarpışma algılama 3D'den çok farklı çalışır.

Önemli Matematik Alanları: THE Bir Motor Dev için en önemli Alan aşina olmak Lineer Cebir ve daha gelişmiş Cebir Konular (Kuaterniyonlar) 'dir. Oldukça basit, eğer Doğrusal Cebir (ve basit Matrix çarpımının ötesinde) rahatsanız, iyi bir başlangıç ​​için.

Sırada Motor Dev'deki Lineer Cebire iyi bağlanan Geometry, muhtemelen zaten bahsetmeye gerek yok.

Ayrıca, Temel Matematik hakkında sağlam bir anlayışa sahip olmak asla acıtmaz. Bu, Fizik Motoru veya daha gelişmiş Gölgeleme Konuları ile uğraşırken Handy'de gelir.

Diğer İlgi Alanları: Kombinatorik, İstatistik

Fizik: Zorunlu değil, basit oyunlar yapmak istiyorsanız. Zarar vermez, ancak bu durumda lise fiziği ile iyi anlaşırsınız.

Bir fizik motoru yazmayı veya mevcut bir mimariyi uygulamayı düşünüyorsanız, evet, zorunludur. Ama korkmayın, Game-Devs için özel olarak yazılmış birçok Fizik Kitabı var. Bir oyunu fizik ile kodlamaya başlamadan ÖNCE aklınızda bulundurun. Oyununuzda fizik olması gerekiyorsa, bu Motorlar temel mimarinize derinlemesine bağlanır.

AI: Tamamen dürüst olmak gerekirse, AI ana İlgi Alanınızsa, tüm bir Motor yazmakla uğraşmazdım. AI, oynamak için mevcut bir Mimariye sahip olduğunuzda yapmak için çok daha eğlencelidir. Bir Motor yazmak bir acı olacaktır ve eğlenceli AI Algoritmaları uygulayabilmeniz için biraz zaman alacaktır.

Ne tür bir oyun geliştirmek istiyorsunuz? Belki de bu bilgilerle bu Noktalar hakkında daha fazla ayrıntı verebilirim.


Ayrıntılı cevabınız için teşekkürler. Sorunuza bir cevap olarak .. şu anda beynimde herhangi bir fikrim yok, ama bazı 3d oyun motoru geliştirmek istiyorum. Ama bazı 2d oyun ile başlamak ve çevreyi tanımak daha iyi düşünün. Tüm bunlardan önce, oyunların görünüşünü ve hissini bilmek için bazı oyunlar oynamalıyım (hiç video oyunu oynamadığım gibi :-)). Kitap terminolojisini ve diğer şeyleri anlamak benim için kolay. Aşağıdaki çok yararlı buldum,
droidsites

Üzgünüm önceki yorumumda
droidsites

Geçmişte, 3D oyunlar geliştirmek istiyorsanız, önce 2D oyunlarla başlamanızı tavsiye ederdim. Bununla birlikte, XNA gibi Mimarilerin ayaklanmasıyla, doğrudan 3D'ye dalmanın daha eğlenceli olduğuna inanıyorum. C # / XNA'ya daha önce bir göz attınız mı? Programlama geçmişiniz göz önüne alındığında sorun olmamalı
Michael Kissner

Hayır, kontrol etmedim. Evet ... C # için sorun değil. Ama çok şey python tür ilgileniyorum :-)
droidsites

Python ile ilgileniyorsanız ve bir oyun oluşturmak için teknoloji oluşturmaktan ziyade bir oyun oluşturmakla ilgileniyorsanız, Panda3D veya Blender Oyun Motorunu kontrol edebilirsiniz.
Sean Middleditch

1

Oyun geliştirmede en çok hangi veri yapılarının kullanıldığını sormak geçerli olsa da, belirli sorunlar için hangi veri yapılarının kullanıldığını sormak çok daha geçerlidir. Karma tabloların oyunlarda süper yaygın olduğunu kolayca söyleyebilirim, ancak bu, kendi kodunuzda bir karma tabloyu ne zaman ve nerede kullanacağınız (ve kullanmamanız!) Açısından yararlı bir şey söylemez. :)

Matematik açısından, çok güçlü bir lineer cebir (vektörler, matrisler, lineer sistem çözme vb.), Çok güçlü bir trigonometri kavraması ve en azından analizin (basit türevler ve entegrasyon) temel bir anlayışına sahip olmanız gerekir. . Herhangi bir kolej düzeyinde doğrusal cebir kursu, size doğru 3B grafik ilkeleri ile çalışmaya başlamak için bilmeniz gereken her şeyi öğretmezse, sizi doğru yola koymalıdır. Ayrıca, oldukça yararlı bulabileceğiniz bir kitabı da bağlarım.

Fizik için gezintiye çıktınız. Fizik iki farklı kategoriye ayrılabilir: çarpışma algılama ve çarpışma tepkisi. Çarpışma tespitinin arkasındaki matematiği kesinlikle bilmelisiniz, çünkü matematik, grafik yapmak için gerekenlerle neredeyse aynıdır (özellikle oklüzyon için ihtiyacınız olan ağaçları ve haritaları oluşturmak için) ve bu şeyleri bir oyun mantığınızın büyük bir kısmı.

Çarpışma tepkisi "basit" ten saçma karışıklık düzeylerine kadar değişebilir ve basit şeyler bile ilk başta sezgisel olmayabilir. Mevcut matematik ve algoritmanızdan memnun kalmayıncaya kadar, Bullet, Havok, PhysX, vb. (Veya 2D oyun üzerinde çalışıyorsanız Box2D) gibi bir kütüphaneye bırakmanızı şiddetle tavsiye ederim. bilgi ve fizik motorlarının nasıl çalıştığını öğrenmek istediğinize karar verin. Daha sonra ilk denemeniz olarak çok basit bir 2D fizik motoru kurmanızı tavsiye ederim. 3D fizik motorları delicesine karmaşık canavarlardır ve oyun programlamasının açık ara en karmaşık ve zor kısmıdır, bu yüzden fizik motorları oyunlarda kullanılan en yaygın lisanslı üçüncü taraf teknolojisidir. Sadece çok fazla oyun görmüyorsun t Kaç oyun sıfırdan gelişmiş grafik motorlarına ve çekirdek motor koduna rağmen Havok veya PhysX'i profesyonel dünyada kullanmak. Oyun motorları inşa etmekten başka bir şey yapmayan şirketler bile genellikle bir fizik motoru lisanslıyor, örneğin Unreal sadece kendi fizik motorunu kullanmak yerine PhysX kullanıyor.

Başlamanız için aşağıdaki kitapları tavsiye ederim. Birincisi, bir 3D oyun programcısı olarak bilmeniz gereken temel matematik hakkında giriş seviyesi bir kitaptır:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

İkincisi, hem grafik kodlamanıza hem de fizik kodlamanıza yardımcı olacak çarpışma algılama algoritmalarına (çarpışma yanıtı değil!) Tespit edilen bir kitaptır:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.