내 E / C 구현은 엔터티가 단지 ID이고 구성 요소는 데이터이며 시스템은 데이터에 대해 행동하는 기본입니다. 현재 객체 재질과 렌더링에 문제가 있습니다. 나는이 간단한 objetcs를 들어 ModelComponent
A와 묶여 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)
하지만 구현은 각 클래스마다 다르며 MaterialComponent
MaterialData 객체에 대한 포인터를 갖습니다.
어떤 접근 방식을 선호하는지 잘 모르겠지만 이러한 방법 중 어느 것도 여러 단계의 주제 나 다른 복잡한 렌더링 기술에 영향을 미치지 않습니다.
이것을 달성하는 방법에 대한 아이디어가 있습니까?