স্থানান্তরের হ্যাশ এবং চতুর্ভুজগুলির 2D স্থানিক বিভাজন বিকল্প


11

আমি আমার গেমটিতে একটি স্থানিক বিভাজন অ্যালগরিদম বাস্তবায়নের চেষ্টা করেছি, তবে স্থানিক হ্যাশ এবং চতুর্ভুজ উভয়ই আমি যা খুঁজছি তা নয়।

আমার স্তরের আকারের কোনও সীমা নেই (কেবলমাত্র আন্তঃ 32 সীমা)। আমার একটি স্থানিক বিভাজন অ্যালগরিদম প্রয়োজন যা "স্তরের প্রস্থ" এবং "স্তর উচ্চতা" প্রয়োজন হয় না।

আমার অনেকগুলি চলমান শারীরিক বস্তু রয়েছে। 500+ অবজেক্টগুলিকে সমর্থন করার জন্য আমার যথেষ্ট দ্রুত গতির অ্যালগরিদম দরকার।

কোন বিকল্প?

উত্তর:


13

গতিশীল গাছ

বক্স 2 ডি একটি অভিজ্ঞ পদার্থবিজ্ঞান / গেম প্রোগ্রামার দ্বারা ডিজাইন করা একটি ভাল অপ্টিমাইজড ইঞ্জিন । মূলত বক্স 2 ডি একটি হ্যাশ গ্রিড ব্যবহার করেছে যার জন্য নির্দিষ্ট উচ্চতা এবং প্রস্থের প্রয়োজন।

এরিন যখন আরও ভাল ব্রডফেস অ্যালগরিদমতে আপগ্রেড হন তিনি নাথানেল প্রেসনের বিটিডিবিভিটি-র সাথে যান। এটি বুলেট পদার্থবিজ্ঞানের দ্বারা ব্যবহৃত ব্রডফেস। এরিন 2 ডি এর জন্য অ্যালগরিদমটি সংশোধিত ও অনুকূলিত করেছেন।

আপনি বক্স 2 ডি ম্যানুয়ালে (.14.11, বা ডায়নামিক ট্রি অনুসন্ধান করতে পারেন) একটি উচ্চ উচ্চ স্তরের ওভারভিউ পড়তে পারেন ।

কোড ইন ডকুমেন্টেশন ব্যতীত এখানে রয়েছে (এটি জনসাধারণের API এর অংশ না বলে বিবেচনা করে খুব ভাল)।

নাথানেল প্রেসনের বিটিডিবিভিটি দ্বারা অনুপ্রাণিত একটি গতিশীল এএবিবি ট্রি ব্রড-ফেজ। একটি গতিশীল ট্রি ভলিউম কোয়েরি এবং রশ্মির কাস্টের মতো ক্যোয়ারীগুলি ত্বরান্বিত করার জন্য বাইনারি ট্রিতে ডেটা সাজায়। পাতাগুলি একটি এএবিবি'র সাথে প্রক্সি হয়। গাছের মধ্যে আমরা b2_fatAABBFactor দ্বারা প্রক্সি AABB প্রসারিত করি যাতে প্রক্সি AABB ক্লায়েন্ট অবজেক্টের চেয়ে বড় হয়। এটি ক্লায়েন্ট অবজেক্টটিকে ট্রি আপডেট ট্রিগার না করে অল্প পরিমাণে স্থানান্তরিত করতে দেয়।

নোডগুলি পুল এবং পুনঃস্থাপনযোগ্য, তাই আমরা পয়েন্টারগুলির পরিবর্তে নোড সূচকগুলি ব্যবহার করি।

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

সমস্ত কোডের মধ্যে সেরা এমআইটি তাই অনুলিপি অনুলিপি / উত্পন্ন / নির্লজ্জভাবে-চুরি / ইত্যাদি


দেখে মনে হচ্ছে ... জটিল! যদিও আমি এটি একবার দেখে নেব। কেউ আমাকে "সুইপ এবং ছাঁটাই" বা "বাছাই এবং ঝাড়ু" কৌশলটি ব্যবহার করার পরামর্শ দিয়েছিল তবে আমি সি # বা। ​​নেট বাস্তবায়ন সম্পর্কে কিছুই খুঁজে পাইনি। আমি একটি সি ++ উদাহরণ পেয়েছি তবে এটি বিভ্রান্তিকর এবং এটি কার্যকর হয়নি (আমি যাইহোক এটি কার্যকর করার চেষ্টা করেছি)। আপনি কি মনে করেন স্যাপ প্রয়োগ করা আরও সহজ হবে? .NET বাস্তবায়ন আছে?
ভিটোরিও রোমিও

8

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

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

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


1

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


0

সম্ভবত আর-ট্রি অ্যালগরিদম আপনি যা খুঁজছেন তা।

আমি স্থির জ্যামিতির জন্য সত্যই ভাল কাজ করি, তবে আপনি বস্তুগুলিকে তাদের নতুন অবস্থানে সরিয়ে ও যুক্ত করে সরিয়ে নিয়ে এটি ব্যবহার করতে পারেন।


আমি একটি সি # বাস্তবায়নের চেষ্টা করেছি এবং "বস্তুগুলিকে তাদের নতুন অবস্থানে অপসারণ এবং যুক্ত করার সময়" পারফরম্যান্সটি খুব খারাপ ছিল।
ভিটোরিও রোমিও

0

আমি স্থির 2D গ্রিড নিয়ে যাওয়ার সিদ্ধান্ত নিয়েছি।

আমি দুটি ভিডিও তৈরি করেছি যা আমি কীভাবে সেগুলি বাস্তবায়ন করেছি সেই গভীরতার সাথে ব্যাখ্যা করে এবং বর্তমান প্রয়োগটি আমার গিটহাব পৃষ্ঠায় উপলভ্য: https://github.com/SuperV1234/SSVSCollision

http://www.youtube.com/watch?v=7HY_SqqaoL4

http://www.youtube.com/watch?v=vYB37BDtHuQ

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