การปรับใช้ E / C ของฉันเป็นสิ่งพื้นฐานที่หน่วยงานเป็นเพียง ID ของคอมโพเนนต์คือข้อมูลและระบบดำเนินการกับข้อมูล ตอนนี้ฉันมีปัญหากับวัสดุวัตถุและการแสดงผลโดยทั่วไป สำหรับ objetcs ธรรมดาที่ฉันมี a ModelComponent
, เชื่อมโยงกับ a RenderSystem
, ModelComponent
จะมีรหัสจุดสุดยอดบัฟเฟอร์ที่ระบบการเรนเดอร์ใช้ ง่ายMaterialComponent
อาจจะมีสีหรือความแข็งแรง specular ฯลฯ แต่ผมอยากให้มันเป็นพอมีความยืดหยุ่นเพื่อให้สามารถมากกว่าหนึ่งทำให้ผ่านและ "ผลกระทบ" MaterialComponent
ทั่วไปที่ไม่ได้เป็นเรื่องง่ายเป็นตัวแปรที่เรียบง่ายใน
พยายามแก้ไขปัญหาเหล่านี้ฉันหาวิธีแก้ไขสองวิธี:
1 - ส่วนประกอบวัสดุที่มีความพิเศษมาก
บางสิ่งเช่นนี้
struct Material : public Component
{
ShaderData* shader;
std::vector<std::pair<std::string, boost::any>> uniforms;
[...]
};
และในระบบเรนเดอร์ฉันจะวนซ้ำและส่งชุดไปที่ shader ฉันคิดว่านี่จะช้า แต่เร็วพอสำหรับจุดประสงค์ของฉัน
2 - อีกชั้นหนึ่งของนามธรรม, MaterialData
การมีคลาสเพื่อห่อวัสดุเฉพาะที่สามารถสืบทอดได้โดยวัสดุพิเศษอะไรก็ตามคลาสพื้นฐานจะมีบางอย่างเช่นvoid set_shader_constants(ShaderData* d)
แต่การติดตั้งจะขึ้นอยู่กับแต่ละคลาสและMaterialComponent
จะมีตัวชี้ไปยังวัตถุ MaterialData
ฉันไม่แน่ใจว่าวิธีการใดที่ฉันต้องการ แต่สิ่งเหล่านี้ไม่ได้สัมผัสเรื่องของการผ่านหลายครั้งหรือเทคนิคการเรนเดอร์ที่ซับซ้อนอื่น ๆ
มีความคิดเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จหรือไม่?