কোনও সত্তা / উপাদান সিস্টেমে কীভাবে উপকরণগুলি পরিচালনা করতে হয়


13

আমার ই / সি বাস্তবায়ন হল বেসিক যেখানে সত্ত্বা কেবল আইডির হয়, উপাদানগুলি ডেটা এবং সিস্টেমগুলি ডেটাতে কাজ করে the এই মুহুর্তে আমি অবজেক্ট সামগ্রীগুলি এবং সাধারণভাবে রেন্ডারিংয়ে সমস্যায় পড়ছি। সহজ objetcs আমি আসতে পারি ModelComponent, একটি বাঁধা RenderSystem, ModelComponentপ্রান্তবিন্দু বাফার id গুলি যা রেন্ডার সিস্টেম ব্যবহার করা হয়। একটি সরল MaterialComponentরঙের সম্ভবত রঙ বা স্পিকুলার স্ট্রিংহিট ইত্যাদি থাকতে পারে তবে আমি চেয়েছিলাম যে এটি একাধিক রেন্ডার পাস এবং সাধারণ "এফেক্টস" এর পক্ষে সহজতর করার জন্য যথেষ্ট নমনীয় হোক যা সাধারণ ভেরিয়েবলের মতো সহজ নয় MaterialComponent

এই সমস্যাগুলি সমাধান করার চেষ্টা করে আমি দুটি সমাধান নিয়ে এসেছি:

1 - সুপার জেনেরিক উপাদান উপাদান

এটার মতো কিছু:

struct Material : public Component
{
    ShaderData* shader;
    std::vector<std::pair<std::string, boost::any>> uniforms;
    [...]
};

এবং রেন্ডার সিস্টেমে আমি লুপ করে ইউনিফর্মটি শেডারে দিয়ে দিতাম। আমি মনে করি এটি ধীর হবে তবে আমার উদ্দেশ্যে এটি যথেষ্ট দ্রুত।

2 - বিমূর্তকরণের আরেকটি স্তর, মেটেরিয়াল ডেটা

নির্দিষ্ট উপকরণ মোড়ানোর জন্য একটি শ্রেণি থাকা, যা বিশেষায়িত উপাদানের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে, বেস শ্রেণীর মতো কিছু থাকবে void set_shader_constants(ShaderData* d)তবে বাস্তবায়ন প্রতিটি শ্রেণীর উপর নির্ভরশীল, এবং MaterialComponentম্যাটেরিয়ালডাটা অবজেক্টের পয়েন্টার থাকবে।

আমি কোন পদ্ধতির পছন্দ করব তা নিশ্চিত নই, তবে এর মধ্যে কোনওটিই একাধিক পাসের বিষয় বা অন্যান্য জটিল রেন্ডারিং কৌশলগুলিকে স্পর্শ করে না।

এটি কীভাবে সম্পাদন করা যায় তার কোনও ধারণা?

উত্তর:


26

উপকরণগুলি একটি গ্রাফিক্স ধারণা এবং এটি আপনার রেন্ডারারের অন্তর্ভুক্ত। কোনও রেন্ডারার খুব স্বল্প স্তরের কোনও সত্তা সিস্টেমের উপরে নির্মিত কোনও স্থাপত্যের টুকরো। সত্তা সিস্টেমগুলি উচ্চ স্তরের গেম অবজেক্টের জন্য হওয়া উচিত। সব কিছুরই উপাদান হওয়ার দরকার হয় না, এবং বাস্তবে, সবকিছুকে এমন একক দৃষ্টান্তের জন্য বাধ্য করার চেষ্টা করা একটি খারাপ ধারণা। এটি একটি সর্বনিম্ন-সাধারণ-ডিনোমিনেটর সমাধান তৈরি করে।

ফলস্বরূপ আমি আপনাকে পরামর্শ দেব যে আপনি একটি ভিন্ন পদ্ধতির গ্রহণ করুন:

  • একটি উপাদান আপনার রেন্ডারারের মধ্যে কেবল অন্য ধরণের।
  • আপনার রেন্ডারারের একটি ধরণ রয়েছে যা "স্ক্রিনে আঁকতে হবে এমন একটি জিনিস" উপস্থাপন করে। প্রায়শই এগুলিকে "রেন্ডার দৃষ্টান্তগুলি" বা "উপস্থাপনা" বা "মডেলগুলি" বলা হয় called এই ধরণের অঙ্কন করার সময় এটি ব্যবহৃত সামগ্রীর একটি রেফারেন্স রয়েছে এবং রেন্ডারারের গ্রাহককে সেই উপাদানটি যা পছন্দসই সেট করতে দেয় তা সরবরাহ করার জন্য একটি পাবলিক এপিআই সরবরাহ করে।

এটি আপনাকে মূলত আপনাকে নিতে ModelComponentএবং পুনরায় নামকরণের জন্য জিজ্ঞাসা করছে Model, সত্তা / উপাদান স্তরটির উপর নির্ভরতা অপসারণ করে এবং আপনার বাকি রেন্ডারারের পাশাপাশি এটি বিমূর্ততার নীচের স্তরে নিয়ে যায়।

তারপরে, আপনি এটি করুন:

  • আপনার অন্যান্য উপাদানগুলির মতো বিমূর্ততার একই স্তরে আপনার কিছু ধরণের "অ্যাসপেক্ট উপাদান" রয়েছে যা কোনও সত্তার ভিজ্যুয়াল উপস্থাপনা উপস্থাপন করে। এই উপাদানটিতে কেবল কিছু উপস্থাপনযোগ্য (উপরে বর্ণিত হিসাবে) একটি রেফারেন্স রয়েছে, যার পরিবর্তে কোনও উপাদানের উল্লেখ রয়েছে। উপাদানটি উপস্থাপনযোগ্য প্রকাশের জন্য একটি এপিআই সরবরাহ করতে পারে (এইভাবে ক্লায়েন্টরা এটিকে ম্যানিপুলেট করতে দেয়) বা এটি এক্সপোজার নিয়ন্ত্রণের জন্য রেন্ডারেবলের এপিআই মুছতে পারে। এটা তোমার উপর.

মডেল এবং উপকরণ উভয়ই উপাদান হয়ে থাকার মাধ্যমে আপনি যে উপাদানটি পরস্পর নির্ভরশীলতার বিষয়টি চালাচ্ছেন তা সম্বোধন করে; একটি সত্তার হয় হয় একটি দিক থাকা উচিত বা না, এবং সেই দিকটি উপাদান সহ সত্তার উপস্থাপনা সম্পর্কে সমস্ত কিছু এনকোড করতে সক্ষম হওয়া উচিত।

এটি আপনাকে রেন্ডার সিস্টেমের বিমূর্ততা রক্ষা করার সাথে সামঞ্জস্যতার অভাবের কারণে উপাদান হিসাবে যে বস্তুটির সাথে উপাদান হিসাবে কাজ করা শক্ত হবে তার সাথে অন্যান্য পদক্ষেপ গ্রহণের জন্য নমনীয়তাও সরবরাহ করে।

আপনার আরও জটিল প্রভাব এবং একাধিক পাসের অনুমতি দেওয়ার বিষয়টি হ'ল এটি মূলত উপাদানটিতে সমাধান করা যেতে পারে যা কোয়েরিতে ফাংশন প্রকাশ করে এবং উপাদানটির শেডার ফাইল দ্বারা প্রকাশিত নামের শেডার ধ্রুবকগুলি সেট করে। এটি বিশেষত সত্য যদি আপনি এফেক্ট ফাইলগুলি (ডি 3 ডি তে) ব্যবহার করেন যা একাধিক পাস এবং এই জাতীয় সমর্থন করে। এমনকি যদি আপনি এফেক্ট ফাইলগুলি ব্যবহার না করেন তবে আপনি পৃথক শেডারের সাহায্যে উপাদান থেকে একাধিক পাসের ধারণাটি প্রকাশ করতে পারেন এবং উপাদান এপিআইকে তার জন্য ম্যানিপুলেটর সরবরাহ করতে অনুমতি দিন। রেন্ডারিং এপিআই-তে সম্ভবত সংহত করা আরও সহজ এবং পরিষ্কার হতে পারে, কারণ উপাদান এখন বিমোচনের একই স্তরে রয়েছে।


1
আপনার উত্তরের জন্য ধন্যবাদ, এই সমস্যাটি বেশ কিছুদিন ধরে আমাকে জর্জরিত করে চলেছিল, তবে ই / সি এর সীমাবদ্ধতা ছাড়াই একটি রেন্ডারার তৈরি করা আরও সহজ।
লুক বি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.