TLDR : 컴포넌트 를 여러 메시로 구성하여 시작합니다.
메쉬 / 재료 쌍과 엔티티 자체 사이에 다른 수준의 간접 지향이 필요하다는 점에서 Asakeron / Byte56 / Laurent에 동의합니다. GraphicsComponent를 정점 및 재질로 보는 대신 최종 래스터에서 픽셀의 한 방울로 생각하십시오. 구현 세부 정보가 있고 더 이상 아무것도 없습니다.
나는 이것을 프로젝트에 대해 많이 생각했고 최적의 솔루션은 GraphicsComponent를 훨씬 더 높은 수준의 구성 요소로 만드는 것입니다.이 기능은 선택 사항이 아니기 때문에 전통적인 'Model'객체의 많은 기능을 포함합니다! 이러한 폴리곤을 버퍼 데이터와 그 이상으로 렌더링하려면 다음과 같은 셰이더가 필요합니다.
- 언급 한 위치
- 스키닝 / 애니메이션 데이터
- 현재 패스 (예 : 두 패스 알파를 사용하는 경우)
- 섀도우 캐스팅 정보 (작업중인 경우)
- 자료 업데이트 방법 및시기 에 대한 정보
- 컬링 기능
파티클 시스템, 빌보드 등을 고려하지 않고 3D 자산에만 적용됩니다. 그러나 모든 것은 그래픽 / 렌더링 코드에만 해당됩니다. 물리, 사운드 또는 스크립팅에는 영향을 미치지 않으므로 그래픽스 / 렌더링 컴포넌트
나는 결국 :
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
이것에서 :
모델은 그래픽 구성 요소가있는 모든 게임 자산입니다.
ModelComponent는 기존 모델과 유사하며 실제로 3D 자산과 동일합니다. GraphicsComponent 컨트롤러 (Model-View-Controller 패턴을 사용하는 경우)는 어떤 유형의 그래픽 자산인지 파악하고 올바르게 그립니다 (ModelComponent는 GraphicsComponent의 서브 클래스 임).
각 GraphicsComponent도 엔터티이며 Entity는 위치 데이터를 직접 저장하므로 한 곳에서만 계산되지만 아이디어는 동일 합니다 .GraphicsComponent는 모델러가 제공하는 것만이 아니라 필요한 모든 것을 항목을 그릴 필요가있었습니다.