Yaklaşık 2 ay önce sahnede olduğumdan beri uygun bir cevap yazacağım.
OpenGL 3.x'i daha iyi öğrenebilmem için çok basit bir oyun motoru yazmaya başladım, ancak deneyimim ve 3D oyunun nasıl tasarlanması gerektiğine dair seyrek bilgimden dolayı, genellikle sınıflarımı tasarlamam gerektiğini fark ettiğim yerlerde problemlerle karşılaşıyorum farklı.
Endişelenme. Deneyim eksikliğinizle, belirli bir sınıfın motorunuzda kullanılacağı tüm olasılıkları ve yolları asla düşünemezsiniz. Sınıfın ana özelliklerini göz önünde bulundurmanız, uygulamanız ve daha sonra yeniden yapılandırmanız en iyisidir. Bir şeyleri düşünmeye çalışma, bu aşamada zamanını boşa harcıyorsun. İlk oyunum tamamen dağınıktı, eminim çoğu insan için durum böyleydi.
Karşılaştığım diğer sorunlar, oyunda zamanın kısa bir şekilde nasıl takip edileceği ve gerektiğinde hareketin nasıl güncelleneceği ve oluşturucunun yeniden çizilmesi gerektiğini nasıl anlatacağı.
İhtiyacınız olan şey, bir oyun döngüsünün ne olduğu hakkında bilgi. Bu , başlamak için iyi bir yerdir. Fizik işleme gibi daha karmaşık bir kod yazmaya başladıktan sonra, değişken kare sürelerine sahip döngüler düşünmek isteyebilirsiniz, ancak küçük başlayın. Basit bir sabit çerçeve oyunu döngüsü şimdilik yeterli.
Ayrıca bir nesneden diğerine çeşitli bayraklar geçirmek için Get ve Set işlevlerini yapmaya devam etmem gerekiyor, bu kötü bir uygulama mı?
Bu daha çok bir yazılım mühendisliği sorusudur. Zamanla hangi verileri korumanız gerektiğini ve hangilerinin güvenli olduğunu göreceksiniz. Sadece bir özelliği uygular ve daha sonra dışarıda nelerin ortaya çıkmadığını görürseniz ve herkese açık veri olarak değerlendirilebilirseniz en iyisi budur.
Her şey bir deneyim meselesi. Bir kamera sınıfı yazacaksınız, daha sonra dönüştürme matrislerinin yanında istediğiniz işlevselliği göreceksiniz. Herhangi bir acil ipucu istiyorsanız, söylemeliyim, çıplak kemikleri uygulayın, daha sonra uzatın.
Makaleler ve Kitaplar:
Bu kitaplar modern oyun motorlarının ve boru hatlarının mimarisinden bahsediyor. Altta yatan teknoloji hakkında size iyi bir genel bakış sunacaklar. Seçmeniz gerekiyorsa ilk kitabı öneririm, bazı teknolojilere karşı daha az "önyargılı", ancak sonunda her ikisi de büyük bilgi kaynakları olduğu için her ikisinden de geçmek istersiniz.
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135
http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806
http://ogldev.atspace.co.uk/index.html
http://www.arcsynthesis.org/gltut/index.html
http://www.opengl.org/sdk/docs/man3/
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/
http://www.opengl.org/sdk/docs/manglsl/
http://www.peroxide.dk/papers/collision/collision.pdf
(Bunu bağlıyorum çünkü uygun 3D çarpışma tespitinin nasıl yapıldığına dair makaleler bulmak zor buldum.)
Daha fazla kitap var, ancak bunu bitirdiğinizde (özellikle Game Engine Mimarisi), ne istediğinizi daha iyi bileceksiniz.
Btw, hala freeglut kullanıyorum, ilerlemeden önce veya daha iyi bir OpenGL kavraması aldıktan sonra daha iyi bir pencereleme sistemine geçmenizi önerir misiniz?
WinAPI, Windows programlamayı öğrenmek için zamanınız ve isteğiniz olduğunu düşünüyorsanız (Windows için geliştiriyorsanız). FreeGLUT öğrenme için iyidir, ancak sonunda daha fazla işlevsellik isteyeceksiniz. Yine de, tamamen başka bir rotaya gitmek istiyorsanız, SFG veya SDL gibi kütüphanelerle OpenGL'yi başlatabilirsiniz. Benim gibi inatçı değilsen FreeGLUT ile devam et. WinAPI için düz gittim.