2D স্ক্রিন স্থানাঙ্ক এবং কার্টেসিয়ান স্থানাঙ্কগুলির মধ্যে পার্থক্যগুলি কীভাবে মোকাবেলা করবেন


23
  • বেশিরভাগ 2 ডি স্ক্রিন / বিটম্যাপ স্থানাঙ্ক সিস্টেমে ইতিবাচক ওয়াই অক্ষটি নীচের দিকে নির্দেশ করে (উপরের বাম কোণে উত্স সহ)।
  • এটি বেশিরভাগ লোকেরা কীভাবে জ্যামিতিকভাবে ইতিবাচক ওয়াই অক্ষটি নির্দেশ করে (কেন্দ্রে উত্সটি দিয়ে থাকে) দিয়ে চিন্তা করে think

কীভাবে বেশিরভাগ গেম দুটি ভিন্ন 2 ডি সমন্বিত সিস্টেম পরিচালনা করে? দুটি মূল ধরণের স্থানাঙ্ক রয়েছে (পর্দা বনাম কার্টেসিয়ান), তবে অনেকগুলি সমন্বিত স্থান থাকতে পারে: স্প্রিট স্পেস, ওয়ার্ল্ড স্পেস, ভিউ স্পেস, স্ক্রিন স্পেস ইত্যাদি ...

পটভূমি:

আমি মূলত আমার গেমটিতে 2 ডি স্ক্রিন সমন্বয় সম্মেলনের সাথে মিল রেখে বিশ্বকে স্থানাঙ্ক তৈরি করেছি। এটি গ্রাফিক্স অঙ্কন রুটিনগুলি ব্যবহার করা খুব স্বাভাবিক করে তুলেছিল, তবে আতান 2 () এর মতো ত্রিকোণমিতিক ফাংশন ব্যবহার করার সময় সূক্ষ্ম সমস্যা দেখা দেয়। Atan2 () 2D স্ক্রিনের স্থানাঙ্কগুলি খাওয়ানোর ফলাফলগুলি খুব বিভ্রান্তিকর কারণ atan2 () ধনাত্মক y অক্ষকে পয়েন্ট আপ করে।

সুতরাং আমি ক্লাসিক কার্টেসিয়ান সমন্বয় ব্যবস্থা অনুসরণ করার জন্য আমার বিশ্বের স্থানাঙ্কগুলি পরিবর্তন করেছি (পর্দার নীচে বাম দিকে উত্স সহ)। আতান 2 () দিয়ে যুক্তি করা অনেক বেশি সরাসরি-এগিয়ে, তবে এখন অন্য ধরণের যুক্তি করা আরও কঠিন:

  • আমি যদি এখানে স্ক্রিনটি ক্লিক করি তবে নীচে কী স্প্রিট রয়েছে?
  • আমি কোথায় সেই স্প্রাইটে ক্লিক করেছি?
  • কোনও স্প্রিট যদি ভুল জায়গায় আঁকানো হয় তবে কী ভুলভাবে গণনা করা হয়েছিল? পর্দার সমন্বয় হয় নাকি বিশ্বের সমন্বয় হয়?

আমি বুঝতে পারি যে পর্দা থেকে কার্তেসিয়ান স্থানাঙ্কে রূপান্তরকরণের মধ্যে উভয় (x, y) মানের একটি anচ্ছিক অনুবাদ সহ -1 দ্বারা y মান স্কেল করা জড়িত। আমি গেম ডিজাইনের জন্য সেরা অনুশীলনে আরও আগ্রহী:

  • বেশিরভাগ গেমগুলি কি কেবল পর্দার সমন্বয়কারী কনভেনশনের সাথে লেগে থাকে এবং আতান 2 () এর মতো জিনিসগুলি কীভাবে কাজ করা উচিত তা নিয়ে তাদের চিন্তাভাবনা পরিবর্তন করে?
  • কখন / কীভাবে সমন্বয় ব্যবস্থা রূপান্তর হয়? (ম্যাট্রিকেস, ওওপি বিমূর্ততা ইত্যাদি ব্যবহার করে)
  • স্প্রাইটের অবস্থানগুলি কি স্প্রাইটের কেন্দ্র হিসাবে বা কোনও কোনও কোণ হিসাবে সঞ্চিত রয়েছে? স্প্রাইটের উচ্চতা / প্রস্থটি "ভুল" দিকের দিকে যাচ্ছে যখন আমি তাদের আঁকছি তখন একটি সাধারণ সমস্যা বলে মনে হচ্ছে।

যদিও আমার প্রশ্নটি মূলত 2 ডি গেমস সম্পর্কে, এটি মনে হয় ওপেনজিএল একটি সমন্বিত সিস্টেম ব্যবহার করে যেখানে ওয়াই অক্ষটি পয়েন্ট করে। ওপেনএল অবশ্যই এই 3 ডি স্থানাঙ্কগুলিকে 2D স্ক্রিন স্থানাঙ্ক সিস্টেমে প্রজেক্ট করতে হবে। ওপেনজিএলের পদ্ধতিতে সম্ভবত কিছু গাইডেন্স পাওয়া যাবে ...

উত্তর:


8

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

"বেশিরভাগ গেমস কীভাবে দুটি ভিন্ন 2 ডি সমন্বিত সিস্টেম পরিচালনা করে?"

  • বেশিরভাগ 2 ডি গেমসটি আমি স্ক্রিন সিস্টেমটি ব্যবহারের উত্স দেখেছি, তবে প্রতিটি সত্তারই তার বিশ্ব স্থানটি জানতে হবে, আপনার অঙ্কন পরিচালককে এটি একটি স্ক্রিন অবস্থানে রূপান্তর করতে দিন। এই মুহুর্তে আপনি ম্যাট্রিক্স রূপান্তরটি যা প্রয়োজন তা করবেন।

"স্প্রাইটের অবস্থানগুলি স্প্রাইটের কেন্দ্র হিসাবে বা কোনও এক কোণ হিসাবে সঞ্চিত আছে?"

  • আপনি যদি কেন্দ্র থেকে কাজ করেন তবে এটি আরও ঘোরানো আরও সোজা এগিয়ে দেয়, যদিও আপনি কোণগুলিও জানতে চাইবেন।

"ওপেনজিএলের পদ্ধতিতে সম্ভবত কিছু গাইডেন্স পাওয়া যাবে ..."

  • 3 ডি ইঞ্জিন সম্পূর্ণ আলাদা কেস। তাদের সত্যিকারের ক্যামেরা থাকার কারণে, পর্দার অবস্থানটি বিশ্বের অবস্থানের চেয়ে বিভিন্নভাবে পৃথক হতে পারে। টপ-ডাউন গেমের জন্য আপনি এক এবং এক্স এবং ওয়াইয়ের পরিবর্তে এক্স এবং জেড অক্ষের সাথে কাজ করছেন।

1

আমি এখানে জিনিসগুলিকে বড় করে দেখছি তবে আমার ঝোঁকটি হ'ল আপনি "স্ক্রিন" স্থানাঙ্ক হিসাবে যে কোনও ডাব / ইউআই সাবসিস্টেম ডিল করেন। আপনার দুটি ম্যাট্রিক হবে: স্ক্রিনটোকার্টেসিয়ান ট্রান্সফর্ম এবং কার্টেসিয়ানটোস স্ক্রিন ট্রান্সফর্ম। যখন মাউস ইনপুট ইভেন্টগুলি পাওয়া যায়, 2D / UI সিস্টেমের ইনপুট ম্যানেজারের কাছে যাওয়ার আগে কার্টেসিয়ানটোস্ক্রিন ট্রান্সফর্ম ব্যবহার করে মাউস সমন্বয়গুলি রূপান্তরিত হয়। সেখান থেকে, ইউআই সিস্টেম স্ক্রিন সমন্বয় ব্যবস্থা ব্যবহার করে হিট-টেস্টিং করবে এবং সেই অনুযায়ী ইভেন্টটি পরিচালনা করবে (বা হ্যান্ডেল করবে না)। যদি মাউস ইনপুট ইভেন্টটি 2D / UI দ্বারা অবরুদ্ধ করা হয়, তবে এটি 3D, (যদি উপস্থিত থাকে) মূল, অপরিবর্তিত স্থানাঙ্কগুলি ব্যবহার করে দেওয়া যেতে পারে।

যেহেতু 2 ডি / ইউআই সিস্টেমটি কেবল "স্ক্রিন" স্থানাঙ্কগুলিতে ডিল করে, তাই এর জ্যামিতিটি রেন্ডারিং ইঞ্জিন দ্বারা প্রক্রিয়া করার আগে স্ক্রিনটোকার্টেসিয়ান ট্রান্সফর্মের মাধ্যমে রূপান্তরিত করা দরকার।


আসলে, আপনি কোন টুলকিটটি ব্যবহার করছেন তার উপর নির্ভর করে মাউস ইনপুট ইভেন্টগুলি ইতিমধ্যে স্ক্রিনের স্থানাঙ্কে থাকতে পারে। সেক্ষেত্রে আপনি এগুলিকে 2D / UI সিস্টেমের জন্য রূপান্তর করবেন না, তবে আপনি 3D সিস্টেমের জন্য (যদি বিদ্যমান থাকে)।
মাইক স্ট্রোবেল

0

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

আমি তখন কেবল বিশ্ব নোডকে রূপান্তর করি। অনুবাদ (ক্যামেরা প্যানিং) এবং আনুপাতিক স্কেলিং (ক্যামেরা জুমিং) এর সাথে আমি আরও দুটি রূপান্তর প্রয়োগ করি:

  • সমন্বয় ব্যবস্থাটি ফ্লিপ করতে A -1 y- স্কেল।
  • ওয়ার্ল্ড ইউনিট (মিটার) কে স্ক্রিন ইউনিট (পিক্সেল) এ রূপান্তর করতে একটি স্কেলিং

আমি তখন গেম অবজেক্ট ড্রইং কোডে ওয়াই-আপ / ওয়ার্ল্ড কোঅর্ডিনেট এবং এইচইউডি অঙ্কন কোডে y-ডাউন / স্ক্রিন স্থানাঙ্ক ব্যবহার করি, যা উভয়ই খুব স্বাভাবিক অনুভব করে।

"আমি কোন বস্তুটিতে ক্লিক করছি" এর মত প্রশ্নের উত্তর দিতে আমি স্থানাঙ্ক সিস্টেমের মধ্যে স্থানাঙ্কগুলি রূপান্তর করতে ডিসপ্লে নোড পদ্ধতি ব্যবহার করি (যেমন globalToLocalএবং এটি ফ্ল্যাশের বিপরীতে)।

যাইহোক, atanওয়াই ডাউন করার সময় সত্যিকার অর্থে আলাদাভাবে কাজ করবেন না, আপনাকে কেবলমাত্র সমস্ত কোণকে ঘড়ির কাঁটার বিপরীতে পরিবর্তনের পরিবর্তে ঘড়ির কাঁটার দিকে যেতে ভাবতে হবে।


0

ডাইরেক্টএক্সের মতো ওপেনজিএলে অনুভূমিক বিমানের সাথে X এবং Z অক্ষ রয়েছে এবং ওয়াই উপরের দিকে মুখ করে রয়েছে।
স্ক্রিনের স্থানাঙ্কগুলির সাথে আমার কোনও সমস্যা হয়নি, এবং আমি মনে করি সবচেয়ে সহজ উপায়টি এটির সাথে চলা সহজভাবে হবে: যদি এটিান 2 এর মতো কোনও কিছু এটি পছন্দ না করে তবে পরামিতিগুলি খাওয়ানো হচ্ছে change

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

উপরের বাম কোণে বা (0,0) উত্স থেকে স্প্রেটিস আঁকা। উইন্ডোর উপরের বাম উত্সের কারণগুলি।

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

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