গেম ডেভলপমেন্টে ভেক্টর


19

আমি প্রোগ্রামিং এবং গেম প্রোগ্রামিংয়ে নতুন। আমি ভেক্টর এবং গণিত সম্পর্কে কিছু পড়ছি, তবে আমার একটি প্রশ্ন আছে - গেম প্রোগ্রামিংয়ে আমি কোথায় ভেক্টর ব্যবহার করব? আপনি যেহেতু ভেক্টর ব্যবহার করছেন সেখানে (2 ডি তে) কোনও সাধারণ উদাহরণ দিতে পারে?

আমি উদাহরণগুলি পেয়েছি তবে বেশিরভাগ তারা কনসোলে থাকে যেখানে তারা সংখ্যা আউটপুট করে এবং বড় উদাহরণগুলি যা আমি বুঝতে পারি না।


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

দুর্দান্ত সব জবাবের জন্য সবাইকে ধন্যবাদ! তবে কেন এই জাতীয় টিউটোরিয়ালের মতো ভ্যাক্টর ব্যবহার করার মতো কিছু নেই ? : zetcode.com / টিউটোরিয়ালস / জাভাগেমিস্টরিয়াল বা কোনও বিকাশকারীর ব্যবহার অন্যরকম নয়?
ভিকওয়ার

বলা মুশকিল, সম্ভবত লেখক এটিকে সহজ এবং প্রাথমিকদের জন্য প্রাথমিক রাখতে চেয়েছিলেন।
মাইক সেমদার

প্রকৃতপক্ষে লেখক এগুলি ব্যবহার করেন, class Star এখানে
মাইক সেম্ডার

এছাড়াও এখানে হয় Point2Dব্যবহৃতclass ResizeRectangle
Maik Semder

উত্তর:


31

ভেক্টর কি?

ভেক্টরগুলি বিভিন্ন মাত্রার সমন্বয়গুলির সেট হয়। ভেক্টরের প্রতিটি সমন্বয় ভেক্টরটি যে স্থানটিতে রয়েছে তার দিকের দিকে কিছু পরম অবস্থানকে উপস্থাপন করে।

  • 1-ডি ভেক্টর হবে {1} । এটি উদাহরণস্বরূপ, এক্স = 1 এ অবস্থান হতে পারে বা একটি সময় t = 1।
  • একটি 2-ডি ভেক্টর হবে {-4,3} । এটি উদাহরণস্বরূপ, এক্স-অক্ষের -4 এ এবং ওয়াই-অক্ষে 3 থাকতে পারে। এটি এক্স-অক্ষের পিছনে অবস্থানে (-4 মিটার) তাপমাত্রা (3 ডিগ্রি) হতে পারে।
  • একটি 3-ডি ভেক্টর হবে {1,2,3} । এটি এক্স-অক্ষ বরাবর স্থান 1 এ, Y- অক্ষের পিছনে 2 এবং জেড-অক্ষের উপরে 3 স্থান হতে পারে। অথবা এটি 1 টি লাল, 2 সবুজ এবং 3 রঙ নীল হতে পারে। অথবা, এটি কোনও সময় টি ( {3} ) এর একটি এক্সওয়াই অবস্থান হতে পারে ( {1,2 } )।

নোট করুন যে সমস্ত ক্ষেত্রে, আমরা আমাদের সমস্যার জন্য ভেক্টরদের অর্থ অর্পণ করেছি। আপনি সাধারণত গেমগুলিতে ভেক্টরগুলি জ্যামিতির জন্য ব্যবহৃত হচ্ছে দেখতে পাবেন, তাদের সাথে অন্য কিছু না করার কোনও কারণ নেই।

আমি কেন ভেক্টর ব্যবহার করব?

প্রথমত, আপনি কখনই আছে ভেক্টর ব্যবহার করতে। যতক্ষণ আপনি এক্স এবং ওয়াইয়ের উপর নজর রাখছেন বা যে কোনও স্থানাঙ্ক যা আপনার পক্ষে যত্নশীল তা কোনওভাবে আপনি ভাল আছেন।

তবে, ভেক্টরগুলি ব্যবহার করার সুবিধা হ'ল তারা দিকনির্দেশ এবং অবস্থানের মতো জিনিসগুলি খুব সুন্দরভাবে উপস্থাপন করে এবং আপনার গায়ে বেশ কয়েকটি গাণিতিক ক্রিয়া সংজ্ঞায়িত করা হয় যা আপনার জীবনকে সহজ করে তোলে।

এগুলির একটি সাধারণ উদাহরণের জন্য, বিন্দুর পণ্যটি বিবেচনা করুন ।

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

শত্রুরা একটি ত্রিভুজটির ভিতরে থাকলে আপনি পরীক্ষা করতে পারেন। শত্রুরা রাডার সেক্টরের উভয় দিকটিকে সংজ্ঞায়িত করে বিমান / রেখাগুলির দুটি অর্ধ-স্পেসের ছেদগুলিতে অন্তর্ভুক্ত থাকলে আপনিও এটি পরীক্ষা করতে পারেন।

বা, আপনি চেক করতে কেবল একটি বিন্দু পণ্য ব্যবহার করতে পারেন । এখানে কীভাবে:

  1. রাডারটির কেন্দ্র থেকে "রাডারের সামনের দিকে" যেতে একটি ভেক্টর তৈরি করুন। এটি সাধারণ করুন।
  2. আমরা রাডারটির কেন্দ্রস্থল থেকে যে বস্তুটির রাডার দৃশ্যমানতাটি দেখতে চাই তার দিকে যেতে ভেক্টর তৈরি করুন। এটি সাধারণ করুন।
  3. দুটি নরমালাইজড ভেক্টরের ডট পণ্যটি নিন।
  4. সেই পণ্যটির আরকোসিন নিন এবং এটি রাডারটির প্রস্থের অর্ধেক কোণের চেয়ে কম কিনা তা পরীক্ষা করুন। যদি তা হয় তবে একটি ব্লিপ আঁকুন।

এটি খুব সহজ, এবং এখন আপনাকে সহজেই রাডারগুলি দেয় যা বিভিন্ন দিকে নির্দেশ করে (কেবলমাত্র সামনের দিকে ভেক্টর পরিবর্তন করুন) এবং বিভিন্ন প্রস্থ (কেবল রাডার প্রস্থের কোণ পরিবর্তন করুন) - এবং আপনিও সেই ক্ষেত্রে একই কোডটি পুনরায় ব্যবহার করতে পারেন !

অন্য কেন আমি ভেক্টর ব্যবহার করব?

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

ভেক্টর গণিত সহ, আমরা প্রত্যেককে একটি পয়েন্ট এবং 3x3 রূপান্তর ম্যাট্রিক্স হিসাবে উপস্থাপন করি। গ্রহটি তার রূপান্তর ব্যবহার করে, জাহাজটি তার রূপান্তর এবং গ্রহের রূপান্তর ব্যবহার করে এবং ড্রোনটি তার রূপান্তর এবং জাহাজের রূপান্তর এবং গ্রহের রূপান্তর ব্যবহার করে।

যখন গ্রহটি সরে যায়, আপনি তার রূপান্তরটি পরিবর্তন করেন এবং জাহাজ এবং ড্রোনটি স্বয়ংক্রিয়ভাবে "বিনামূল্যে" অবস্থিত হয়। অনেক ক্লিনার কোড।

তবুও রাজি হইনি। ভেক্টরগুলি প্রায় সমস্ত গ্রাফিক্স লাইব্রেরি দ্বারা ব্যবহৃত অবস্থান, জ্যামিতি এবং গতির জন্য স্থানীয় প্রতিনিধিত্বও - এবং অবশ্যই ওপেনএল এবং ডাইরেক্টএক্স। এগুলি ব্যবহার না করে আপনি পালিয়ে যাওয়ার সম্ভাবনা নেই।

উপসংহার ভেক্টরগুলি পরিষ্কার কোড লেখার জন্য একটি শক্তিশালী হাতিয়ার যা জ্যামিতিক সমস্যাগুলি পরিষ্কার ও মার্জিতভাবে সমাধান করে।


14

একটি 2 ডি উদাহরণ হ'ল স্ক্রিন স্থানাঙ্ক, এটি স্ক্রিনে একটি পিক্সেল সনাক্ত করে এবং এতে একটি এক্স- এবং একটি ওয়াই-উপাদান রয়েছে [x, y] অর্থাৎ বাম উপরের পর্দার অবস্থান [0, 0]

অন্য উদাহরণ: ডান পর্দার সীমানা থেকে বাম স্ক্রিনের সীমানায় কোনও পাঠ্য স্ক্রোলিংয়ের কল্পনা করুন। এখন আপনাকে প্রতি সেকেন্ডে পিক্সেলে স্ক্রোলিং পাঠের বেগ নির্ধারণ করতে হবে, [[-20, 0] যার অর্থ পাঠ্যটি প্রতি সেকেন্ডে 20 পিক্সেল বামে স্ক্রল করে এবং উচ্চতাটি কখনই পরিবর্তন করে না।

আরও একটি উন্নত উদাহরণ: একটি 2 ডি গেমটি কল্পনা করুন যা বিভিন্ন স্ক্রিন রেজোলিউশন 800x600, 1024x768 ইত্যাদিতে চালিত হয় বলে মনে করা হয়। এটি সহজেই অভ্যন্তরীণভাবে স্ক্রিনের প্রস্থ 0.0 থেকে 1.0 এবং উচ্চতা 0.0 থেকে 1.0 এর সাহায্যে গেমটির যুক্তিকে ডিক্লুপ করে ব্যবহার করে করা যেতে পারে আসল পর্দার রেজোলিউশন থেকে। এখন আপনি যখন স্ক্রিনে আঁকেন তখন আপনি কেবল অভ্যন্তরীণ ভেক্টরকে রেজোলিউশন ভেক্টর দিয়ে গুণান:

screen_pos = internal_pos * screen_ressolution

দ্রষ্টব্য, সমস্ত 3 ভেরিয়েবল এখানে 2D ভেক্টর, তাদের একটি x- এবং একটি y- উপাদান রয়েছে, যেমন এই অভ্যন্তরীণ_পোসের জন্য [0.5, 0.25]:

[400, 150] = [0.5, 0.25] * [800, 600]

সুতরাং অভ্যন্তরীণ অবস্থান [0.5, 0.25] প্রকৃত পর্দার অবস্থান [400, 150] এ রূপান্তরিত হয়েছে

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


কোনও ভেক্টর কোনও একক মাত্রার অ্যারে, কোনও ধরণের তালিকার মতো নয়? যখন আমরা স্ক্রিন রেজোলিউশনের কথা বলছি তখন আমরা কি বহুমাত্রিক অ্যারে (প্রতিটি এক্স এবং ওয়াই অক্ষের জন্য একটি সমন্বিত) কথা বলছি না? 'ভেক্টর' এখানে কোনও ম্যাট্রিক্সের সাথে মেশানো হয়নি তা নিশ্চিত করার জন্য। =)
মারকুইলারের

@ স্ক্রিনের জন্য সম্পূর্ণ পিক্সেল ডেটা মূলত একটি বিটম্যাপ হিসাবে বহুমাত্রিক অ্যারে হিসাবে বিবেচনা করা যেতে পারে, তবে প্রস্থ এবং উচ্চতার মানগুলি, অন্য কথায় রেজোলিউশনটি করতে পারে না
মাইক সেমডার

2
নোট করুন যে কোনও ভেক্টর প্রায়শই গণিতে এবং প্রোগ্রামিংয়ে বেশ আলাদাভাবে আচরণ করা হয়। গাণিতিকভাবে ভাষী, একটি ভেক্টর হয় না একটি বহুমাত্রিক অ্যারের যদিও কিছু ভিত্তি থেকে সম্মান সঙ্গে তার উপাদান একসঙ্গে যেমন একটি অ্যারের নির্ধারণ করুন। ভেক্টর নিজেই স্থানাঙ্কিত আক্রমণকারী। অপারেশন screen_pos = internal_pos * screen_resolutionকরা হয় না আপনি এটা লিখেছি পরিবর্তিত তুল্য, এটি আরো উপযুক্তভাবে লেখা যেতে পারে screen_pos = map_to_screen * internal_pos, যেখানে map_to_screenএকটি রৈখিক ম্যাপিং (যা এই ক্ষেত্রে একটি তির্যক এক একটি ম্যাট্রিক্স হিসেবে লেখা যেতে পারে,) হয়।
বাম দিকের বাইরে

6

ওল্ফায়ার গেমস ব্লগে গেম ডেভলপমেন্টে ভেক্টরগুলির দুর্দান্ত ব্যাখ্যা এখানে রয়েছে:

http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/


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

1

একটি ভেক্টর এমন একটি সত্তা যার মান এবং দিক উভয়ই থাকে। আসল বিশ্বে ভেক্টর এবং ফিজিক্স ভিত্তিক গেমগুলির উদাহরণগুলির মধ্যে বেগ এবং গতি অন্তর্ভুক্ত রয়েছে। কেবলমাত্র মান রয়েছে তবে দিকনির্দেশ নেই এমন বৈশিষ্ট্যগুলিকে স্কেলার বলা হয় এবং এর মধ্যে অবস্থান, ভর, ঘনত্ব এবং আরও কিছু অন্তর্ভুক্ত।

গেমগুলির জন্য ভেক্টরগুলির প্রয়োজন হয় যা ভেক্টরগুলির মতো শারীরিক বৈশিষ্ট্যগুলি অনুকরণ করে (যেমন উল্লিখিত - গতি, ত্বরণ এবং আরও কিছু)। গণিত যে ভেক্টর গণনার জন্য ব্যবহার করা হয় বলা হয় বীজগণিত রৈখিক


গতি একটি স্কেলার, এটির বেগের দৈর্ঘ্য
মাইক সেমডার

সঠিক - স্থির
এরান গাল্পেরিন

1
এবং অবস্থানটি যথাযথভাবে ভেক্টর হিসাবে বিবেচিত হয়, এটি দূরত্ব যা স্কেলার।
Ali1S232

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

1

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

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


অবস্থান ভেক্টর নয়
ইরান গাল্পেরিন


2
@ ইরান গাল্পেরিন আমি জানি গণিতবিদদের মধ্যে এটি বেশ বিস্তৃত মত। একটি বিন্দু এবং এটি সম্পর্কিত অবস্থান ভেক্টর মধ্যে পার্থক্য যদিও বেশ একাডেমিক। পার্থক্য সম্পর্কে গোলমাল করার কোনও ব্যবহারিক কারণ নেই।
আআআআআআআআআআআআআআআআআআআআআআআআআআআআ। 15

1
সেখানে ব্যবহারিক কারণ আছে, একবার আপনি 4D homogenious স্থানাঙ্ক এবং ম্যাট্রিক্স সঙ্গে কাজ, আপনি আছে যে পার্থক্য করতে। যদিও এই প্রশ্নের ক্ষেত্রের জন্য এটি প্রাসঙ্গিক নয়।
মাইক সেমদার

@ ই বিজনেস এটি "দর্শন" নয় এটি একটি সত্য। আর আমি শিক্ষার দ্বারা পদার্থবিদ, গণিতবিদ নন ian
ইরান গাল্পেরিন

0

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

struct Point2
{
float x, y;
};

struct Vector2
{
float x, y;
};

তবে পার্থক্যটি সত্যিই এটিতে নেমে আসে। একটি বিন্দু কেবল একটি বিন্দু, অন্যদিকে ভেক্টর একটি তীর।

যদি তোমার থাকে

Point2.x = 5;

Point2.y = 10;

আপনার এই বক্তব্যটি আমি এই অবস্থান x x এবং y 10 এ বোঝাতে চাইছি।

তবে আপনি যখন ভেক্টর ঘোষণা করেন ...

Vector2.x = 5;

Vector2.y = 10; 

আপনি সত্যিই বলছেন আমি 0,0 থেকে x 5, y 10 পর্যন্ত একটি তীর ঘোষণা করছি;

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

point2.x = 10;

point2.y = 15;

এখন আপনি এই পয়েন্টটি সরাতে একটি ভেক্টর ব্যবহার করতে পারেন, যাক আমরা এই বিন্দুটি X অক্ষ 10 ইউনিট উপরে সরিয়ে নিতে চাই তাই আমরা বলতে পারি

vector2.x = 10;

vector2.y = 0;

point2 += vector2;

আপনার ভেক্টর তীরটি যেখানে এটি বলেছেন এখন পয়েন্ট সরিয়ে নিয়েছে।

পয়েন্ট এখন হয়

point2.x = 20;

point2.y = 15;

একটি সর্বশেষ বিষয় লক্ষণীয় হ'ল কখনও কখনও ভেক্টরটি বিন্দুর মতো ব্যবহার করা হয় এবং বিপরীতভাবে ব্যবহৃত হয় কারণ তারা একই ধরণের ডেটা রাখে।


একটি বিন্দু হল একটি ভেক্টর। এটি উত্স থেকে শুরু করে পয়েন্ট পর্যন্ত ভেক্টর
কম্যুনিস্ট ডাক

1
@ ডক প্রযুক্তিগতভাবে এটি সঠিক নয় বলে কথা বলছেন, পজিশন পয়েন্ট থেকে মূল_পয়েন্টটি বিয়োগ করে ভেক্টরকে পাওয়া যায়, তবে এটি তাদের সমান করে না: v = pos - originসুতরাং v != posযেহেতু মূলটি একটি বিন্দু{0, 0, 0, 1}
মাইক সেম্ডার

@Duck: একটি বিন্দু নয় একটি ভেক্টর কিন্তু একটি বিন্দু এবং উৎপত্তি সংজ্ঞায়িত একটি ভেক্টর, যা শুধু অধিকাংশ সময় হিসাবে ভাল হিসাবে যদি আপনার মূল হল 0.

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