আমি কীভাবে 2 ডি ফিজিক্স ইঞ্জিন তৈরি করব? [বন্ধ]


20

আমি তৈরি করা সবচেয়ে উন্নত গেমগুলি হ'ল ফিজিক্স ইঞ্জিন বক্স 2 ডিফ্ল্যাশএএস 3 দিয়ে তৈরি একটি 8-বলের পুল খেলা এবং স্তরগুলির সাথে একটি প্ল্যাটফর্ম গেম।

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

প্রাসঙ্গিক জ্ঞান-বেস প্রয়োজনীয় যাই হোক না কেন তার জন্য কৌশল এবং নিবন্ধগুলি পরামর্শ করুন।


উত্তর:


16

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

পুল হল পাঠ: চেনাশোনা বা গোলকের মধ্যে দ্রুত, সঠিক সংঘর্ষ সনাক্তকরণ বৃত্ত / বৃত্ত এবং গোলক / গোলকের সংঘর্ষের বিষয়ে আলোচনা করে।

এন টিউটোরিয়াল বিভাজন অক্ষ উপপাদ্য ভিত্তিক সনাক্তকরণ এবং প্রতিক্রিয়া একটি মৌলিক বোঝার জন্য বিস্ময়কর।


9

এরিন Catto হয়েছে Box2D বাস্তবায়ন সম্পর্কে সব GDC বক্তৃতা অনলাইন। আমার অভিজ্ঞতায় বক্স 2 ডি পড়ার জন্য সোজা কোড রয়েছে।


পিডিএফ হ'ল সত্যই শক্ত উপকরণ। তবে, আমি যখন সিপিপি এবং এইচ ফাইলগুলির মাধ্যমে পড়ি, যেমন আপনি বলেছিলেন, এগুলি "বোধগম্য" T ধন্যবাদ আপনাকে।
বিষ্ণু

+1 টি। বক্স 2 ডি স্থিতিশীলতা সম্পর্কে খুব সতর্কতা অবলম্বন করে, এমন একটি জিনিস যা আপনি নিজের ঘূর্ণায়মান যখন খুব কঠিন হয়।
লন্ডার

5

আপনি এটি কীভাবে করতে পারেন তা এখানে:

আনুমানিক আন্দোলন

প্রতিটি পদার্থবিজ্ঞানের বস্তুর এই ভেক্টরগুলির প্রয়োজন:

  • অবস্থান : বস্তুটি যেখানে।
  • গতি : কীভাবে এর অবস্থান পরিবর্তন হচ্ছে।
  • ত্বরণ : এটির গতি কীভাবে পরিবর্তন হচ্ছে।

সুতরাং, স্বজ্ঞাতভাবে, আপনাকে প্রতিটি পদার্থবিজ্ঞানের বস্তুর প্রতি ফ্রেমটিতে এই ধরণের জিনিসটি করতে হবে a:

a.speed    += a.acceleration
a.position += a.speed

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

ধাক্কা

এই ধরণের ক্রমানুসারে সংঘর্ষের পরিমাণ প্রায় হতে পারে:

  1. সনাক্তকরণ : এটি সনাক্ত হয়েছে যে দুটি মৃতদেহ ছেদ করে।
  2. রেজোলিউশন : প্রতিটি দেহের অবস্থান পরিবর্তন করা হয় যাতে তারা আর ছেদ না করে।
  3. পদার্থবিজ্ঞান : প্রতিটি দেহের গতি পরিবর্তন, ঘর্ষণ এবং পুনরুদ্ধারের জন্য (বাড়াতে) পরিবর্তিত হয়।

এটি ডিসক্রিট সংঘটন সনাক্তকরণ হিসাবে পরিচিত, কারণ এটি সময়ে পৃথক পয়েন্টে ঘটে। প্রতিটি পদক্ষেপ মনোযোগ প্রাপ্য:

পদক্ষেপ 1: সংঘর্ষ সনাক্তকরণ (কি জিনিস সংঘর্ষে?)

জন্য দুটি বৃত্ত : শুধু পরীক্ষা যদি তাদের কেন্দ্র পৃথক্ তাদের ব্যাসার্ধ সমষ্টি থেকে অনেক বেশি হয়।

জন্য দুই আয়তক্ষেত্র : চেক তাদের কোণ স্থানাঙ্ক অন্য কোন আয়তক্ষেত্র মধ্যে রয়েছে পারেন।

আরও জটিল বহুভুজ জড়িত যে কোনও কিছুর জন্য আপনার পৃথকীকরণ-অক্ষ-উপপাদ্য প্রয়োজন যা অন্য প্রশ্নের জন্য একটি বিষয়।

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

পদক্ষেপ 2: সংঘর্ষের রেজোলিউশন (এগুলি সরিয়ে নিয়ে যাওয়া।)

সংঘর্ষের সমাধানের জন্য একটি সহজ পদ্ধতি হ'ল সংঘর্ষ সনাক্তকরণ থেকে প্রাপ্ত মানগুলি ব্যবহার করে ন্যূনতম অনুপ্রবেশ দ্বারা অনুবাদ করা । এর মধ্যে মূলত ন্যূনতম সম্ভাব্য চলাচলের দূরত্বের সাথে অবজেক্টগুলি সরিয়ে নেওয়া জড়িত।

উদাহরণস্বরূপ, বৃত্ত-বৃত্ত সংঘর্ষের বিষয়টি বিবেচনা করুন যেখানে বৃত্তগুলির মধ্যে একটি স্থির করে দেওয়া হয়েছে। ন্যূনতম স্থানচ্যুতি ভেক্টরের একই মিডিয়াপয়েন্ট ভেক্টরগুলির মধ্যে পার্থক্য হিসাবে একই দিক রয়েছে। এর দৈর্ঘ্য হ'ল তাদের রেডির যোগফল এবং কেন্দ্রগুলির মধ্যে দূরত্বের মধ্যে পার্থক্য।

এই ধারণাটি সহজেই অন্যান্য আকারগুলিতে সাধারণীকরণ করে।

সমস্যাগুলি : উভয় সংঘর্ষকারী বস্তু যদি চলনযোগ্য হয় তবে আপনার চলনটির একটি বিশ্বাসযোগ্য সান্নিধ্য পেতে আপনার উভয়কে সামগ্রিক দূরত্বের কিছুটা ভগ্নাংশের সাহায্যে সরানো হতে পারে। তাদের অবশ্যই স্পষ্টতই বিভিন্ন দিকে যেতে হবে।

পদক্ষেপ 3: সংঘর্ষ পদার্থবিজ্ঞান (অন্যান্য পরিবর্তন।)

সর্বাধিক সুস্পষ্ট বিষয় যা ঘটতে থাকে তা হ'ল এক বা দুটি বস্তুর দিক পরিবর্তন হয় অর্থাৎ তার গতি ভেক্টরকে আবর্তিত করে। এটি কার্যকর করা বেশ সহজ।

Pitfalls : অবজেক্টস হতে পারে ইলাস্টিক , কিন্তু তারা পারে না , যে ক্ষেত্রে সিস্টেমের মধ্যে মোট শক্তি কমে যাবে। বায়ু প্রতিরোধের কারণে আপনার টানতে পারে । ঘর্ষণ (বিশেষত স্থিতিশীল ঘর্ষণ ) বাস্তবায়নের জন্য কুখ্যাতভাবে জটিল

কিছু সিদ্ধান্তে

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

আপনার প্রয়োজনগুলি যদি সহজ হয় বা আপনি শিখতে আগ্রহী হন তবে এটি ব্যবহার করে দেখুন।

যদি আপনার প্রয়োজনীয়তাগুলি জটিল হয় বা আপনি গণিত পছন্দ করেন না, তবে আপনার জন্য বিশদ বিবরণে পদার্থ বিজ্ঞানের ইঞ্জিন পান engine বক্স 2 ডি এবং বুলেট গেমগুলিতে বেশ জনপ্রিয়।



4

সম্ভবত সবচেয়ে বিস্তৃত টিউটোরিয়াল শৈলী রিসোর্স:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/

একই ব্লগ থেকে এই সম্পর্কিত নিবন্ধগুলি দেখুন:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dumies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- একটানা সংঘর্ষের-ইঞ্জিন-পদ্ধতির অংশ -1 /


1
ওয়াইল্ডবানি ব্লগের এন্ট্রিগুলি দুর্দান্ত। +1 টি।
কমিউনিস্ট হাঁস

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