আমি একটি 2 ডি গেম লিখছি যেখানে আমার গেমের জগতের এক্স অক্ষগুলি বাম থেকে ডানদিকে চলছে , y অক্ষগুলি উপরে থেকে নীচে চলছে এবং z অক্ষটি পর্দার বাইরে চলেছে:
আমার গেমের জগতটি টপ-ডাউন হয়ে গেলেও গেমটি সামান্য কাত করে দেওয়া হয়:
আমি বিশ্ব স্পেস থেকে স্ক্রিন স্পেসে, এবং তদ্বিপরীত প্রকল্পে কাজ করছি। আমার আগের মতো কাজ করা হচ্ছে:
var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight);
var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix);
NegateY()
এক্সএনএ'র y অক্ষটি উপরে থেকে নীচে পরিবর্তে নীচে থেকে উপরের দিকে চলে তাই এক্সটেনশন পদ্ধতিটি ঠিক এর মতোই বলে does উপরের স্ক্রিনশট এ সমস্ত কাজ করে দেখায়। মূলত, আমার কাছে থ্রিডি স্পেসে অনেকগুলি পয়েন্ট রয়েছে যা আমি তার পরে স্ক্রিন স্পেসে রেন্ডার করি। আমি ক্যামেরার বৈশিষ্ট্যগুলিকে রিয়েল টাইমে সংশোধন করতে পারি এবং এটি দেখতে নতুন অবস্থানে সঞ্চার করতে পারি। স্পষ্টতই আমার আসল গেমটি পয়েন্টের পরিবর্তে স্প্রিট ব্যবহার করবে এবং ক্যামেরার অবস্থানটি স্থির হবে তবে আমি চেষ্টা করছি সমস্ত গাণিতিকে জায়গা করে নেওয়ার আগেই।
এখন, আমি অন্যভাবে ফিরে রূপান্তর করার চেষ্টা করছি। অর্থাৎ উপরের স্ক্রিন স্পেসে একটি x এবং y পয়েন্ট দেওয়া , বিশ্ব স্থানের সাথে সম্পর্কিত পয়েন্ট নির্ধারণ করুন। সুতরাং আমি যদি কার্সারটিকে নির্দেশ করি, বলুন, সবুজ ট্র্যাপিজয়েডের নীচে বামে, আমি একটি বিশ্ব স্পেস রিডিং পেতে চাই (0, 480)। Z- র তুল্য অপ্রাসঙ্গিক। বা, বরং, বিশ্ব স্থানটিতে ম্যাপিংয়ের সময় z স্থানাঙ্ক সর্বদা শূন্য হবে। মূলত, আমি এই পদ্ধতির স্বাক্ষরটি প্রয়োগ করতে চাই:
public Vector2 ScreenPointToWorld(Vector2 point)
আমি এই কাজটি পেতে বেশ কয়েকটি বিষয় চেষ্টা করেছি তবে আমার ভাগ্য ভাল নেই। আমার সর্বশেষ চিন্তা যে আমি কল প্রয়োজন Viewport.Unproject
/ পর্যন্ত কাছাকাছি বিভিন্নমুখী সঙ্গে দুইবার z- র মান, পরিসমাপ্তি নিরূপণ Ray
, এটা স্বাভাবিক, তারপর ছেদ নিরূপণ Ray
একটি সঙ্গে Plane
মূলত আমার জগতের গ্রাউন্ড-লেভেল প্রতিনিধিত্ব করে। যাইহোক, আমি শেষ পদক্ষেপে আটকে গিয়েছিলাম এবং নিশ্চিত ছিলাম না যে আমি অতিরিক্ত জটিলতার বিষয় ছিল কিনা।
কেউ কীভাবে আমাকে এটি অর্জন করতে পারে তার সঠিক দিক নির্দেশ করতে পারে?