আমি কীভাবে একটি ব্লক-ভিত্তিক 2 ডি গেমটিতে আবদ্ধ আলো প্রয়োগ করব?


11

আমি 2 ডি আলো করতে চাই যা ইন-গেমের অবজেক্টগুলি দ্বারা ব্লক করা যায়। আমার গেমটিতে একটি শীর্ষ-নীচের দৃশ্য রয়েছে এবং সমস্ত গেমের অবজেক্টগুলি আয়তক্ষেত্র দ্বারা বর্ণিত হয়।

ধরা যাক আমার একটি 10x10 বিশ্ব রয়েছে এবং আমি 1x1 এ একটি আলো এবং দেয়ালের চারদিকে প্রাচীর রাখি। আমি 1x1 এ আলোর উত্সটি দেখতে সক্ষম হতে চাই, তবে অন্য কোথাও নয়, কারণ এটি দেয়ালগুলি দ্বারা অবরুদ্ধ।

আমি কাস্টিং আলোর রশ্মির কাজ শুনেছি, তবে কীভাবে এটি কাজ করে?


1
এই প্রশ্নের কয়েকটি ভাষা-অজ্ঞাত উত্তর দেখতে চাই।
দশতো

2
@ ড্যাশটো: আপনার যে ভাষা ব্যবহার করছেন তাতে আপনার কোডের একটি কার্যকরী অংশ দরকার? এটি জিজ্ঞাসা করার জন্য একটি ভুল জায়গা ..
ক্রোমস্টার

আপনি কি চেষ্টা করেছেন? আপনি যখন "অন্য কোথাও আলোর উত্স না থাকার কথা বলছেন", আপনি কী বোঝাতে চাইছেন? সবেমাত্র আপনাকে 1,1 ব্লক জ্বালিয়ে দিয়েছে এবং এটিই। হয়তো আমি আপনার প্রশ্নটি পাই না, আপনি একটি চিত্র পোস্ট করতে পারেন?
লরেন্ট কুইভিদু

1
@ ক্রোম স্টার্ন: আমি ঠিক এর বিপরীতে জিজ্ঞাসা করছি, আসলে - এমন ধারণাগত উত্তর যা ভাষার উপর নির্ভর করে না। সদৃশ হিসাবে যুক্ত দুটি থ্রেড ধারণাগুলি সম্পর্কে খুব বেশি কথা বলে না। প্রকৃতপক্ষে এই সাইটের অনুরূপ প্রশ্নের বেশিরভাগেরই উত্তর রয়েছে যা "এই লাইব্রেরিটি ব্যবহার করুন!" এটি কারওর জন্য কম সহায়ক যারা এটি বুঝতে পারে যে এটি কীভাবে কাজ করে।
দশতো

@ দ্যাশ্টো: এটি তথ্যের একটি গুরুত্বপূর্ণ অংশ, আপনার এটি প্রশ্নটিতে যুক্ত করা উচিত;)
ক্রোমস্টার

উত্তর:


13

অমিত প্যাটেল 2 ডি রশ্মির ingালাই সম্পর্কে একটি খুব সুন্দর নিবন্ধ লিখেছেন ।

এটিতে হালকা জাল তৈরির জন্য আলোক উত্সের পরিসরের অভ্যন্তরের প্রতিটি শীর্ষে রশ্মি যুক্ত cast

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

সমস্ত ভিজ্যুয়াল উদাহরণ পোস্টে ইন্টারেক্টিভ এবং খুব সহজে বোঝা যায়।

আপনাকে নিজেই কোনও বাক্সে সীমাবদ্ধ রাখতে হবে না, আপনি যে পরিধিটি সনাক্ত করেছেন তা আপনার পছন্দ মতো কোনও আকার হতে পারে।


1

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

এটি দেখতে কেমন লাগবে তা এখানে ।


আমি কেবল জিজ্ঞাসা করেছি কীভাবে আমি রে কাস্টিং ব্যবহার করব। আমি এটি সম্পর্কে জানি।
লিকুইডলাইন

0

যদি আপনি জানেন যে কাস্ট কাস্টিং কি, তবে আপনাকে যা করতে হবে তা হ'ল হার্ড-কোড করা code যতক্ষণ না প্রতিটি ভার্টেক্সের জন্য আপনার সমন্বয় থাকে ততক্ষণ এটি অত্যধিক জটিল নয়।

প্রথমে হালকা-উদ্ভাসিত বস্তু তৈরি করুন। আপনার আলোকে x, y স্থানাঙ্কে রাখুন।

#include <math.h>
int i = 0;
if ( sqrt( abs( light.x - vertex.x )^2 + abs( light.y - vertex.y )^2 ) <= light.radius)
{
    lightOccludingVertices[i] = vertex;
    i++;
}

//If two or more vertices are both a member of an individual wall,
//illuminate the triangular area between the light, the furthest 
//vertex on the x-axis, and the furthest vertex on the y-axis

এটি অবতল বহুভুজের জন্য কাজ করার গ্যারান্টিযুক্ত নয়, তবে এটি কোনও উত্তল বহুভুজগুলির জন্য ঠিক কাজ করা উচিত।

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

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

অবতল এবং উত্তল বহুভুজ সম্পর্কে আরও তথ্য

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