E / C uygulamam, Varlıkların yalnızca ID'ler, Bileşenler veri olduğu ve Sistemlerin Veriler üzerinde hareket ettiği temel uygulama. Şu anda genel olarak nesne malzemeleri ve renderleme konusunda sorun yaşıyorum. Basit nesneler için ModelComponent
, a'ya bağlı bir RenderSystem
, ModelComponent
render sisteminin kullandığı köşe tamponu kimlikleri var. Basit bir MaterialComponent
muhtemelen renk veya aynasal mukavemet vb. Olurdu, ama ben birden fazla render geçişi ve basit bir değişken kadar kolay olmayan genel "efektler" sağlamak için yeterince esnek olmasını istedim MaterialComponent
.
Bu sorunları çözmeye çalışırken iki çözüm buldum:
1 - Süper jenerik Malzeme Bileşeni
Bunun gibi bir şey:
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
ve render sisteminde üniformaları gölgelendiriciye geçirip geçirdim. Bunun yavaş, ama benim amacım için yeterince hızlı olacağını düşünüyorum.
2 - Başka bir soyutlama katmanı, MaterialData
Belirli malzemeleri sarmak için belirli bir materyali sarmak için bir sınıfa sahip olmak, temel sınıfın bir şeye sahip olacağını, void set_shader_constants(ShaderData* d)
ancak uygulamanın her sınıfa kadar olduğunu ve MaterialComponent
MaterialData nesnesine bir işaretçi olacağını.
Hangi yaklaşımı tercih edeceğimden emin değilim, ama bunların hiçbiri çoklu geçiş konusuna veya diğer karmaşık oluşturma tekniklerine dokunmuyor.
Bunu nasıl başaracağınız hakkında bir fikriniz var mı?