আইসোমেট্রিক ভিউ ফ্ল্যাশ গেমটিতে আমি কীভাবে অঙ্কনের ক্রমটি নির্ধারণ করব?


12

এটি একটি ফ্ল্যাশ গেমের জন্য, আইওমেট্রিক ভিউ সহ। আমাকে কীভাবে অবজেক্টটি বাছাই করতে হবে যাতে অঙ্কন করার সময় জেড-বাফার চেকিংয়ের কোনও প্রয়োজন নেই। এটি সহজ বলে মনে হতে পারে তবে অন্য বিধিনিষেধ রয়েছে, একটি দৃশ্যে 10,000+ অবজেক্ট থাকতে পারে তাই অ্যালগরিদম O (n ^ 2) এর চেয়ে কম চালানো দরকার। সমস্ত বস্তু আয়তক্ষেত্রাকার বাক্স, এবং দৃশ্যে সেখানে 3-4 টি বস্তু রয়েছে। এটি করার সর্বোত্তম উপায় কী?

হালনাগাদ

প্রতিটি টাইলের মধ্যে কেবলমাত্র অবজেক্ট থাকে (আমার অর্থ বস্তুগুলি একে অপরের উপরে স্ট্যাক করতে পারে না)। এবং আমরা উভয় অবজেক্ট এবং অবজেক্টের মানচিত্রে অ্যাক্সেসের নিজস্ব অবস্থান পেয়েছি।

UPDATE2

এই পরিসংখ্যান দেখুন:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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

পার্শ্ব-নোট: যেহেতু সমস্ত বস্তু আয়তক্ষেত্রাকার প্রিজম, এটি গাণিতিকভাবে প্রমাণযোগ্য যে সমস্যাগুলির চাহিদা পূরণের জন্য কমপক্ষে একটি ড্রয়ের ক্রম রয়েছে।


2
আপনার আরও তথ্য পোস্ট করা উচিত। বস্তু স্ট্যাক (3 ডি) করতে পারেন? অবজেক্টের অবস্থান আছে বা মানচিত্রে বস্তু আছে? ইত্যাদি
কাওড

2
এই হিসাবে একই gamedev.stackexchange.com/questions/8151/...
Tetrad

@ টেট্রাড হ্যাঁ, তবে আমরা দৃশ্যে যে জিনিসগুলি রেখেছি তা সম্পর্কে সামান্য পার্থক্য রয়েছে।
Ali1S232

@ গেজেট (আপনার আপডেটের পরে) অবজেক্টগুলি কেবল 1 * এক্স এবং এক্স * 1 বা এক্স * ওয়াই হতে পারে? আপনি কি বেশ কয়েকটি সাব-অবজেক্টে অবজেক্টগুলিকে বিভক্ত করতে পারবেন? (সবুজ 4 টি উপ-সবুজ বস্তুর মতো) অবজেক্টের ওরিয়েন্টেশনটি কী স্থির হয়?
KaoD

এছাড়াও: কতগুলি সংলগ্ন টাইলগুলি আপনার অবজেক্টের উচ্চতা অস্পষ্ট করে?
KaoD

উত্তর:


8

আপনার বস্তুগুলি যদি আপনার আইসোমেট্রিক টাইলসের সাথে মেলে তবে এটি আসলে খুব সহজ। এই চিত্রটি একবার দেখুন:

আইসোমেট্রিক অঙ্কনের আদেশ

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

এটিতে একটি নতুন সমস্যা রয়েছে: আপনি সহজেই দেখতে পাবেন যে এখন এটির জটিলতা ও (এন) যেখানে এন আপনার বোর্ডের আকার ( N=W*H)। এই সমস্যাটি কাটিয়ে উঠতে কেবল একটি নতুন রৈখিক ডেটা কাঠামো তৈরি করুন যেখানে আপনার কাঠামোর প্রতিটি সূচী একটি নির্দিষ্ট গভীরতার সাথে মেলে, যখনই কোনও অবজেক্টের গভীরতা পরিবর্তন হয় তখন তা আপডেট করে।

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


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

1
@ গেজেট এবং এটাই আপনার প্রশ্নের প্রথম স্থানে পোস্ট করতে হবে: পি
কওডি

3
এটি যাওয়ার উপায়, 'টাইলস' +1
ভ্যালমন্ড

2

এই বিষয়ে আমার বিশেষ জ্ঞান নেই তবে এখানে একটি চিন্তাভাবনা রয়েছে।

প্রতিটি ঘর "অঙ্কিত নয়" হিসাবে চিহ্নিত করে শুরু করুন। (বা সমতুল্যভাবে, প্রতিটি "নিকটতম-লাইন লাইন" কোষের নিকটতম "আঁকা" জিনিসটির অবস্থান বা একটি সেট ইত্যাদির প্রতিনিধিত্ব করার জন্য একটি অ্যারের ব্যবহার করুন) তারপরে, প্রতিটি ঘরের জন্য (আমি সম্ভবত তাদের মাধ্যমে যাব অর্ডার KaoD বর্ণিত): পরীক্ষা করুন যে সেই ঘরটি আঁকানো হয়েছে কিনা; যদি এটি আঁকানো হয়নি এবং এতে কোনও বস্তু রয়েছে, তবে পরীক্ষা করুন যে সেই বস্তুটি দ্বারা অস্পষ্ট হওয়া প্রতিটি ঘর আঁকা হয়েছে কিনা, এবং যদি তা পুনরুক্তিভাবে আঁকেনি; প্রয়োজনে সেই কক্ষে থাকা বস্তুটি আঁকুন; এবং সেই ঘরটি এবং এর অবজেক্টের দ্বারা দখলকৃত কোনও ঘরকে "আঁকুন" হিসাবে চিহ্নিত করুন।

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

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


আমি বিশ্বাস করি যে এই অ্যালগরিদমকে সমস্যার সাথে অভিযোজিত টপোলজিক্যাল সাজানোর একটি রূপ হিসাবে দেখা যেতে পারে ; আমি নিজেই সেই দিকে অস্পষ্টভাবে নির্দেশ করতে চলেছিলাম। টপোলজিকাল সাজান বেশিরভাগ অর্ডার / নির্ভরতা সমস্যার সমাধান।
কেভিন রেড

1

আমি চিত্রশিল্পীর অ্যালগরিদমটি ক্যামেরার থেকে দূরের কক্ষ থেকে ট্যাক্সিক্যাব দূরত্বে ব্যবহার করতাম এবং প্রথমে ক্যামেরার নিকটতম চিত্র আঁকতাম এবং তারপরে বাহিরে চলে যাই।

সম্পাদনা: আপনি প্রতিটি ঘরের বিষয়বস্তু পৃথকভাবে আঁকতে না পারলে এটি কাজ করে না।


এটি কার্যকর হতে পারে, তবে আমি এটি বলতে পারি না এটি কীভাবে প্রস্তাবিত এলগরিদম বাইট 56 বা KaoD এর থেকে পৃথক। আমার কাছে মনে হয় এটি এখনও আমার দ্বিতীয় সম্পাদনায় বর্ণিত একই সমস্যা রয়েছে।
Ali1S232

1

আপনাকে "বিশ্বাস করা যায় যে এটি" গাণিতিকভাবে প্রমাণযোগ্য যে সমস্যাটির চাহিদা পূরণের জন্য কমপক্ষে একটি ড্রয়ের ক্রম রয়েছে "? এখানে একটি তুচ্ছ কাউন্টারিক্স নমুনা যেখানে আপনি জেড-বাছাই করা বস্তুর উপর নির্ভর করতে পারবেন না:

এখানে চিত্র বর্ণনা লিখুন


কৌতূহলের বাইরে ... আপনি কি পাল্টা দৃষ্টান্তটি বিশদভাবে বলতে পারবেন? এটি গ্রিড নয়।
কাওড

ভালভাবে লক্ষ্য করুন যে প্রতিটি টাইলের মধ্যে একটি মাত্র অবজেক্ট রয়েছে এবং অবজেক্টটি এক বা একাধিক টাইলস দখল করতে পারে তবে তাদের প্লেনে সবসময় আয়তক্ষেত্রাকার প্রক্ষেপণ থাকে। এই বিবৃতি প্রমাণ করার জন্য এই দুটি শর্তই যথেষ্ট।
Ali1S232

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