TLDR: Bileşeni yaparak ile başlayacak birden mesh oluşur.
Kafes / malzeme çiftleri ile varlığın kendisi arasında başka bir dolaylama seviyesinin gerekli olduğu konusunda Asakeron / Byte56 / Laurent ile aynı fikirdeyim. GraphicsComponent'e köşe noktaları ve materyaller olarak bakmak yerine, onu son taramadaki piksel bloğu olarak düşünün - nasıl elde ettikleri / uyguladıkları bir uygulama detayı ve daha fazlası.
Projem için bunu çok düşündüm ve bence en uygun çözüm, geleneksel 'Model' nesnesinin işlevselliğinin çoğunu kapsayan GraphicsComponent'i çok daha yüksek bir bileşen haline getirmektir - çünkü bu işlev isteğe bağlı değildir! Bu çokgenleri sadece arabellek verilerinden çok daha fazla hale getirmek için ve gölgelendiriciye ihtiyaç vardır, örneğin:
- Bahsettiğiniz pozisyon
- Kaplama / Animasyon verileri
- Geçerli Geçiş (örneğin iki geçişli alfa kullanılıyorsa)
- Gölge döküm bilgisi (eğer yapıyorsanız)
- İle ilgili bilgiler nasıl malzemeyi güncellemek ve ne zaman
- Toplama işlevselliği
Ve bu sadece 3B varlıklar için, parçacık sistemleri, reklam panoları vb. Göz önünde bulundurulmadan, ancak hepsi sadece grafik / oluşturma kodu ile ilgilidir - fizik, ses veya komut dosyasını etkilemez, bu yüzden oturması mantıklıdır Grafik / İşleme bileşeni.
Sonunda:
Model : Entity, IHasGraphicsComponent, IHasSkeleton, IHasAnimationStore //This is the 'game object' - it is passed to the GraphicsController
ModelComponent : GraphicsComponent //This is the actual graphics component, used by the GraphicsController in the context of the game object.
ModelComponentPart : GraphicsComponent //This is also a graphics component
Mesh //These are implementation details
Material
ModelComponentPart : GraphicsComponent
Mesh
Material
Skeleton
Animations
Bunda:
Model, grafik bileşeni olan herhangi bir oyun öğesidir.
ModelComponent geleneksel Model ile benzerdir ve aslında 3D varlıklar içindir. GraphicsComponent denetleyicisi (Model-View-Controller desenini kullanırsanız), ne tür grafik öğesinin olduğunu bulmaktan ve doğru şekilde çizmekten sorumludur (ModelComponent'in GraphicsComponent'in bir alt sınıfı olduğunu unutmayın).
Ayrıca, her bir Grafik Bileşeni de bir Varlık ve Varlık Konum verilerini doğrudan tek bir yerde hesaplandığı için saklar, ancak fikir aynıdır: GraphicsComponent, sadece modellerden gelenleri değil, gerekli olan her şeyi - çizmek için gerekli.