내 E / C 구현은 엔터티가 단지 ID이고 구성 요소는 데이터이며 시스템은 데이터에 대해 행동하는 기본입니다. 현재 객체 재질과 렌더링에 문제가 있습니다. 나는이 간단한 objetcs를 들어 ModelComponentA와 묶여 RenderSystem, ModelComponent정점 버퍼 IDS 렌더링이 시스템의 사용이있다. 단순한 MaterialComponent것은 아마도 색이나 거울의 강도 등을 가지 겠지만, 둘 이상의 렌더 패스와 일반적인 "효과"에서 간단한 변수만큼 쉽지 않은 유연성을 원했습니다 MaterialComponent.
이 문제를 해결하기 위해 두 가지 해결책을 찾았습니다.
1-슈퍼 제네릭 소재 구성 요소
이 같은:
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
그리고 렌더링 시스템에서 유니폼을 반복하여 쉐이더에 전달합니다. 나는 이것이 느리지 만 내 목적을 위해 충분히 빠를 것이라고 생각합니다.
2-또 다른 추상화 계층, MaterialData
특정 머티리얼을 랩핑하는 클래스를 가짐에 따라, 특수 머티리얼로 상속 될 수있는 기본 클래스는 비슷 void set_shader_constants(ShaderData* d)하지만 구현은 각 클래스마다 다르며 MaterialComponentMaterialData 객체에 대한 포인터를 갖습니다.
어떤 접근 방식을 선호하는지 잘 모르겠지만 이러한 방법 중 어느 것도 여러 단계의 주제 나 다른 복잡한 렌더링 기술에 영향을 미치지 않습니다.
이것을 달성하는 방법에 대한 아이디어가 있습니까?