এই পরামর্শটি রেন্ডারিংয়ের জন্য সত্যই সুনির্দিষ্ট নয় তবে এমন একটি সিস্টেম নিয়ে আসা উচিত যা জিনিসগুলি অনেকাংশে পৃথক করে রাখে। প্রথমে চেষ্টা করুন এবং 'গেমওজেক্ট' ডেটা অবস্থানের তথ্য থেকে আলাদা রাখুন।
এটি লক্ষণীয় যে সাধারণ XYZ অবস্থানিক তথ্য এত সহজ নাও হতে পারে। আপনি যদি পদার্থবিজ্ঞানের ইঞ্জিন ব্যবহার করছেন তবে আপনার অবস্থানের তথ্য 3 য় পক্ষের ইঞ্জিনের মধ্যে সংরক্ষণ করা যেতে পারে। আপনাকে হয় তাদের মধ্যে সিঙ্ক্রোনাইজ করতে হবে (এতে প্রচুর অর্থহীন মেমরি অনুলিপি করা হতে পারে) বা ইঞ্জিন থেকে সরাসরি তথ্যটি জিজ্ঞাসা করতে হবে। তবে সমস্ত বস্তুর পদার্থবিজ্ঞানের প্রয়োজন হয় না, কিছু স্থানে স্থির করা হবে তাই ভাসমানগুলির একটি সহজ সেট সেখানে সূক্ষ্মভাবে কাজ করে। কিছু এমনকি অন্য বস্তুর সাথে সংযুক্ত থাকতে পারে, তাই তাদের অবস্থানটি আসলে অন্য একটি অবস্থানের অফসেট। একটি উন্নত সেটআপে আপনার অবস্থানটি কেবলমাত্র জিপিইউতে সঞ্চিত থাকতে পারে কেবলমাত্র কম্পিউটার সাইডের প্রয়োজন হবে স্ক্রিপ্টিং, স্টোরেজ এবং নেটওয়ার্কের প্রতিরূপের জন্য। সুতরাং আপনার অবস্থানগত ডেটার জন্য আপনার বেশ কয়েকটি সম্ভাব্য পছন্দ থাকতে পারে। এখানে উত্তরাধিকার ব্যবহার করা বোধগম্য।
তার অবস্থানের মালিকানাধীন কোনও বস্তুর পরিবর্তে object বস্তুটি নিজেই একটি সূচকযুক্ত ডেটা কাঠামোর মালিকানাধীন উচিত। উদাহরণস্বরূপ, কোনও 'স্তর' এর একটি অক্ট্রি থাকতে পারে, বা কোনও পদার্থবিজ্ঞানের ইঞ্জিনের 'দৃশ্য' থাকতে পারে। আপনি যখন রেন্ডার করতে চান (বা কোনও রেন্ডারিং দৃশ্য সেটআপ করতে পারেন), আপনি ক্যামেরাতে দৃশ্যমান অবজেক্টগুলির জন্য আপনার বিশেষ কাঠামোটি জিজ্ঞাসা করুন।
এটি ভাল মেমরি পরিচালনা দিতে সহায়তা করে। এইভাবে এমন কোনও বস্তু যা আসলে কোনও অঞ্চলে নেই এমনকি এমন একটি অবস্থানও রাখে না যা কোনও অঞ্চলে সর্বশেষ ছিল যখন এটি ছিল 0.0 কোর্ড বা কর্ডগুলি ফিরে আসার চেয়ে বোঝায়।
যদি আপনি আর অবজেক্টে স্থানাঙ্ক না রাখেন, অবজেক্ট.জেটএক্সএক্স () এর পরিবর্তে আপনার স্তরের.জেএক্সএক্স (অবজেক্ট) থাকবে। স্তরটিতে অবজেক্টটির সন্ধান করা সমস্যাটি সম্ভবত একটি ধীর গতি সম্পন্ন হবে কারণ এটি এর সমস্ত বস্তুগুলির মধ্যে নজর রাখতে হবে এবং আপনার অনুসন্ধানের সাথে মিলে যেতে হবে।
এড়াতে আমি সম্ভবত একটি বিশেষ 'লিঙ্ক' ক্লাস তৈরি করব। একটি যা একটি স্তর এবং একটি অবজেক্টের মধ্যে আবদ্ধ হয়। আমি এটিকে একটি "অবস্থান" বলি। এটিতে xyz স্থানাঙ্কের পাশাপাশি স্তরে হাতল এবং বস্তুর একটি হ্যান্ডেল থাকবে। এই লিঙ্ক শ্রেণিটি স্পেসিয়াল কাঠামো / স্তরে সংরক্ষণ করা হবে এবং বস্তুর সাথে এর দুর্বল উল্লেখ থাকবে (যদি স্তর / অবস্থানটি ধ্বংস হয়ে যায় তবে অবজেক্টের রেফারেন্সটি বাতিল করতে হবে। এটি সম্ভবত অবস্থান শ্রেণিটি মূল্যবান হতে পারে) অবজেক্টটির 'নিজস্ব', যদি কোনও স্তর মুছে ফেলা হয়, তেমনি বিশেষ সূচক কাঠামো, এতে থাকা অবস্থানগুলি এবং এর অবজেক্টগুলিও।
typedef std::tuple<Level, Object, PositionXYZ> Location;
এখন অবস্থানের তথ্য কেবলমাত্র এক জায়গায় সংরক্ষণ করা হয়েছে। অবজেক্ট, স্পেসিয়াল ইনডেক্সিং স্ট্রাকচার, রেন্ডারার ইত্যাদির মধ্যে নকল নয়।
অক্ট্রিগুলির মতো স্পেসিয়াল ডেটা স্ট্রাকচারগুলিতে প্রায়শই তারা যে জিনিসগুলি সঞ্চয় করে থাকে তার স্থানাঙ্কের প্রয়োজন হয় না। কাঠামোতে নোডগুলির আপেক্ষিক অবস্থানের মধ্যে অবস্থানটি সংরক্ষণ করা হয় (এটি এক ধরণের ক্ষতিকারক সংকোচনের মতো ভাবা যেতে পারে, দ্রুত অনুসন্ধানের সময়গুলির জন্য নির্ভুলতা ত্যাগ করা)। অক্টোবরে লোকেশন অবজেক্টের সাথে তারপরে কোয়েরি শেষ হয়ে গেলে এর ভিতরে প্রকৃত স্থানাঙ্কগুলি পাওয়া যায়।
অথবা আপনি যদি নিজের পদার্থের অবস্থানগুলি বা দুজনের মধ্যে একটি মিশ্রণ পরিচালনা করতে পদার্থবিজ্ঞানের ইঞ্জিন ব্যবহার করছেন তবে আপনার সমস্ত কোডকে এক জায়গায় রাখার সময় লোকেশন ক্লাসটি সেই স্বচ্ছভাবে পরিচালনা করতে হবে।
আরেকটি সুবিধা হ'ল অবস্থান এবং রেফারেন্স একই স্তরে সংরক্ষণ করা হয়। আপনি অবজেক্টটি কার্যকর করতে পারবেন e টেলপোর্টটো (অন্যান্য_বজেক্ট) এবং এটি স্তর স্তরে কাজ করতে পারেন। একইভাবে এআই-এর পাথ-সন্ধান কোনও আলাদা অঞ্চলে কিছু অনুসরণ করতে পারে।
রেন্ডারিং এর সাথে শ্রদ্ধা সহ। আপনার রেন্ডারে লোকেশনটির সাথে একই রকম বাঁধাই থাকতে পারে। এটির মধ্যে রেন্ডারিং নির্দিষ্ট জিনিসগুলি বাদে। আপনার সম্ভবত সম্ভবত এই কাঠামোটিতে 'অবজেক্ট' বা 'স্তর' সংরক্ষণ করার প্রয়োজন নেই। আপনি যদি রঙ বাছাইয়ের মতো কিছু করার চেষ্টা করছেন বা তার উপরে ভাসমান একটি হিটবার উপস্থাপন করছেন তবে অন্যথায় রেন্ডারার কেবল জাল এবং এ জাতীয় বিষয়ে যত্নশীল হন তবে অবজেক্টটি কার্যকর হতে পারে। রেন্ডারেবল স্টাফ একটি জাল হবে, এছাড়াও বাউন্ডিং বাক্স ইত্যাদি থাকতে পারে।
typedef std::pair<RenderableStuff, PositionXYZ> RenderThing;
renderer.render(level, camera);
renderer: object = level.getVisibleObjects(camera);
level: physics.getObjectsInArea(physics.getCameraFrustrum(camera));
for(object in objects) {
//This could be depth sorted, meshes could be broken up and sorted by material for batch rendering or whatever
rendering_que.addObjectToRender(object);
}
আপনার প্রতিটি ফ্রেমে এটি করার দরকার নেই, আপনি নিশ্চিত করতে পারেন যে আপনি বর্তমানে ক্যামেরা দেখানোর চেয়ে একটি বড় অঞ্চল নিয়েছেন। এটি ক্যাশে করুন, কোনও বাউন্ডিং বাক্সটি সীমার মধ্যে চলে আসে কিনা তা দেখতে ট্র্যাক অবজেক্টের গতিপথ, ক্যামেরার গতিবিধি ট্র্যাক করে ইত্যাদি on তবে আপনি এটিকে বেঞ্চমার্ক না করা পর্যন্ত এই ধরণের স্টাফ দিয়ে গণ্ডগোল শুরু করবেন না।
আপনার পদার্থবিজ্ঞানের ইঞ্জিনে নিজেও একই রকম বিমূর্ততা থাকতে পারে, কারণ এতেও অবজেক্ট ডেটার দরকার নেই, কেবল সংঘর্ষের জাল এবং পদার্থবিজ্ঞানের বৈশিষ্ট্য।
আপনার সমস্ত মূল অবজেক্টের ডেটা এতে থাকা জালটির নাম হবে। গেম ইঞ্জিনটি এরপরে এগিয়ে যেতে পারে এবং নির্দিষ্ট বস্তুর রেন্ডার (যা আপনার রেন্ডারিং এপিআই, অর্থাৎ ডাইরেক্টএক্স বনাম ওপেনগ্লের সাথে সুনির্দিষ্ট হতে পারে) এর সাথে আপনার বস্তু শ্রেণীর উপর চাপ না দিয়ে পছন্দসই বিন্যাসে এটি লোড করতে পারে।
এটি বিভিন্ন উপাদান পৃথক রাখে। এটি আপনার পদার্থবিজ্ঞানের ইঞ্জিন প্রতিস্থাপনের মতো কাজগুলি করা সহজ করে তোলে কারণ যে জিনিসগুলি বেশিরভাগ ক্ষেত্রে এক জায়গায় থাকে। এটি ইউনিটেস্টিংকে আরও সহজ করে তোলে। আপনার প্রয়োজনীয় সমস্ত লোকেশন ক্লাস হওয়ায় আপনি কোনও আসল নকল বস্তু সেটআপ না করে পদার্থবিজ্ঞানের অনুসন্ধানগুলির মতো বিষয়গুলি পরীক্ষা করতে পারেন। আপনি জিনিস সহজেই অনুকূলিত করতে পারেন। এটি আরও সুস্পষ্ট করে তোলে যে আপনার কোন্ ক্লাসগুলি এবং একক অবস্থানগুলিতে অনুকূলকরণের জন্য আপনার কী কোয়েরিগুলি করা উচিত (উদাহরণস্বরূপ উপরের স্তর level বিটভিজিবলঅবজেক্টটি যেখানে ক্যামেরাটি খুব বেশি না সরে আপনি জিনিসগুলি ক্যাশে করতে পারবেন)।
m_renderable
সদস্যের সাথে ইন্টারঅ্যাক্ট করুন । এইভাবে, আপনি আপনার যুক্তি আরও ভাল পৃথক করতে পারেন। পদার্থবিজ্ঞান, আইআই এবং হোয়াট নোট এমন সাধারণ বস্তুগুলিতে রেন্ডারযোগ্য "ইন্টারফেস" প্রয়োগ করবেন না .. এর পরে, আপনি আলাদাভাবে উপস্থাপনা পরিচালনা করতে পারেন। জিনিসগুলিকে আরও বেশি ডিকোপল করার জন্য আপনার ওপেনজিএল ফাংশন কলগুলির উপর বিমূর্তিটির একটি স্তর প্রয়োজন। সুতরাং, কোনও ভাল ইঞ্জিনের বিভিন্ন রেন্ডারযোগ্য বাস্তবায়নের মধ্যে কোনও জিএল এপিআই কল আসবে বলে আশা করবেন না। এটি একটি মাইক্রো সংক্ষেপে।