আমি এই বিষয়ে বর্ণিত যা করতে ইচ্ছুক:
http://www.allegro.cc/forums/print-thread/283220
আমি এখানে উল্লিখিত বিভিন্ন পদ্ধতির চেষ্টা করেছি।
প্রথমে আমি ক্যারাস 85 দ্বারা বর্ণিত পদ্ধতিটি ব্যবহার করার চেষ্টা করেছি:
কেবলমাত্র দুটি ত্রিভুজ হাইপোনটেনাসের অনুপাত নিন (আপনি অন্যটির জন্য কোন ত্রিভুজ ব্যবহার করেন তা বিবেচনাধীন নয়, আমি বিন্দু 1 এবং পয়েন্ট 2 কে আপনি যে দূরত্ব হিসাবে গণনা করছেন তা প্রস্তাব করি)। এটি আপনাকে বৃহত্তর ত্রিভুজ থেকে কোণে ত্রিভুজটির অনুপাতের শতাংশ দেবে। তারপরে আপনি কেবল এক্স-কো-অর্ডিনেট অফসেট পেতে সেই মানটি দিয়ে ডেল্ট্যাক্সকে এবং গুণমান দ্বারা ডেল্টে y- সমন্বিত অফসেট পাবেন।
তবে বস্তুটি পর্দার প্রান্ত থেকে কতটা দূরে রয়েছে তা গণনার কোনও উপায় আমি খুঁজে পাইনি।
আমি তারপরে রাই কাস্টিং ব্যবহার করার চেষ্টা করেছি (যা আমি এর আগে কখনও করিনি) 23 ইয়ারল্ড 3 ইয়ারল্ড প্রস্তাবিত:
স্ক্রিনের কেন্দ্র থেকে অফস্ক্রিন অবজেক্টে একটি রশ্মি ফায়ার করুন। আয়তক্ষেত্রে কোথায় রে ছেদ করে সেখানে গণনা করুন। আপনার স্থানাঙ্ক আছে।
আমি প্রথমে দুটি পয়েন্টের x এবং y অবস্থানের পার্থক্যের দ্বারা গঠিত ত্রিভুজের হাইপোপেনিউজ গণনা করেছি। আমি এই লাইন বরাবর ইউনিট ভেক্টর তৈরি করতে এটি ব্যবহার করেছি। আমি এক্সটিউন্ডেট বা y স্থানাঙ্ক স্ক্রিনটি বন্ধ না হওয়া পর্যন্ত আমি সেই ভেক্টরটির মধ্য দিয়ে লুপ করেছি। দুটি বর্তমান x এবং y মানগুলি তীরের x এবং y গঠন করে।
আমার রশ্মির castালাই পদ্ধতির কোড এখানে (সি ++ এবং অ্যালেগ্রো 5 এ লিখিত)
void renderArrows(Object* i)
{
float x1 = i->getX() + (i->getWidth() / 2);
float y1 = i->getY() + (i->getHeight() / 2);
float x2 = screenCentreX;
float y2 = ScreenCentreY;
float dx = x2 - x1;
float dy = y2 - y1;
float hypotSquared = (dx * dx) + (dy * dy);
float hypot = sqrt(hypotSquared);
float unitX = dx / hypot;
float unitY = dy / hypot;
float rayX = x2 - view->getViewportX();
float rayY = y2 - view->getViewportY();
float arrowX = 0;
float arrowY = 0;
bool posFound = false;
while(posFound == false)
{
rayX += unitX;
rayY += unitY;
if(rayX <= 0 ||
rayX >= screenWidth ||
rayY <= 0 ||
rayY >= screenHeight)
{
arrowX = rayX;
arrowY = rayY;
posFound = true;
}
}
al_draw_bitmap(sprite, arrowX - spriteWidth, arrowY - spriteHeight, 0);
}
এটি তুলনামূলকভাবে সফল ছিল। পর্দার উপরের এবং বামদিকে বস্তুগুলি অবস্থিত হলে তীরগুলি স্ক্রিনের নীচের ডান অংশে প্রদর্শিত হয় যেমন তীরগুলি আঁকানো হয়েছে তার অবস্থানগুলি পর্দার কেন্দ্রের চারপাশে 180 ডিগ্রি ঘোরানো হয়েছে।
আমি ধরে নিয়েছি এটি এই কারণে হয়েছিল যে যখন আমি ত্রিভুজটির অনুমানের গণনা করছিলাম, তখন x এর পার্থক্য বা y এর পার্থক্য নেতিবাচক হোক না কেন এটি সর্বদা ইতিবাচক হবে।
এটি সম্পর্কে চিন্তাভাবনা করে, রশ্মি ingালাই সমস্যাটি সমাধানের ভাল উপায় বলে মনে হচ্ছে না (এটি স্কয়ারটি () এবং লুপের জন্য একটি বৃহত ব্যবহার করে জড়িত থাকার কারণে)।