অবজেক্ট-ওরিয়েন্টেড ওপেনজিএল


12

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

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


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

যখন ইঞ্জিনগুলি রেন্ডারিংয়ের কথা আসে তখন আপনি কি একজন শিক্ষানবিস?
সমুরসার

এই সুযোগটি কিছুটা সঙ্কুচিত না করে যুক্তিসঙ্গতভাবে উত্তর দেওয়া যাবে না। শুধু আপনি কি নির্মাণ করতে চেষ্টা করছেন? এটি কোন ধরণের গেম, কী ধরণের গ্রাফিক্স ইত্যাদি রয়েছে?
নিকল বোলাস

1
@ সুলিভান: "আমি ভেবেছিলাম যে প্রায় কোনও খেলায় এই ধরণের ধারণাগুলি প্রযোজ্য হবে।" তারা না। আপনি যদি আমাকে টেট্রিস বানাতে বলেন, আমি ওপেনজিএল-এর আশেপাশে একটি বড় মোড়ক স্তর বা কিছু তৈরি করতে বিরক্ত করব না। শুধু এটি সরাসরি ব্যবহার করুন। আপনি যদি আমাকে ماس এফেক্টের মতো কিছু করতে বলেন তবে আমাদের রেন্ডারিং সিস্টেমের চারপাশে আমাদের বিমূর্ততার একাধিক স্তর প্রয়োজন। টেট্রিসে অবাস্তব ইঞ্জিন নিক্ষেপ করে মাছি শিকারে শটগান ব্যবহার করা হয়; এটি সরাসরি হাতে কোডিংয়ের চেয়ে টাস্কটিকে আরও শক্ত করে তোলে। আপনি শুধুমাত্র বড় এবং একটি সিস্টেম জটিল হিসাবে আপনি গড়ে তুলতে চাই না প্রয়োজন , এবং কোন বড়।
নিকল বোলাস

1
@ সুলিভান: আপনার প্রশ্নের একমাত্র জটিলতা হ'ল আপনি যেখানে একাধিক ফাইলের বিভাজন নিয়ে কথা বলছেন। যা আমি টেট্রিসেও করব is এবং টেট্রিস এবং অবাস্তব ইঞ্জিনের মধ্যে বিভিন্ন স্তরের জটিলতা রয়েছে। তাই আবার: আপনি কোন সম্পর্কে জিজ্ঞাসা করছেন?
নিকল বোলাস

উত্তর:


6

আমি মনে করি ওও ওপেনজিএল এটি প্রয়োজনীয় নয়। আপনি শেডার, মডেল ইত্যাদি শ্রেণীর কথা বলার সময় এটি আলাদা হয়।

মূলত আপনি প্রথমে গেম / ইঞ্জিনের সূচনা করবেন (এবং অন্যান্য জিনিস)। তারপরে আপনি টেক্সচার, মডেল এবং শেডারগুলি র্যামে (যদি প্রয়োজন হয়) এবং বাফার অবজেক্টগুলিতে লোড করবেন এবং শেডারগুলি আপলোড / সংকলন করবেন। এর পরে, আপনি, আপনার ডেটা কাঠামো বা shader, মডেল ক্লাসে আছে int- এ শেডার, মডেল এবং টেক্সচার বাফার বস্তুর ID- র।

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

  • তর্ক SceneManager করুন এবং প্রতিটি বস্তুর পাঠাতে পেশকারী উপস্থাপনার জন্য
  • কিছু দৃশ্য ম্যানেজার পদ্ধতিতে বড় হাতের অক্ষর
  • সিন্ডেনজারকে রেন্ডারারের কাছে প্রেরণ করুন এটি এটি পরিচালনা করে

রেন্ডারার সম্ভবত অবজেক্টের অঙ্কন ফাংশনটি কল করবে যা প্রতিটি জালের অঙ্কিত ফাংশনকে কল করবে যা গঠিত এবং জাল টেক্সচার অবজেক্ট, বাঁধার শেডার, কল করে ওপেনএল ড্র ফাংশন এবং তারপরে শেডার, টেক্সচার এবং অবজেক্ট ডেটা বাফার অবজেক্টগুলিকে অপব্যবহার করবে use

দ্রষ্টব্য: এটি ঠিক উদাহরণস্বরূপ, আপনার দৃশ্যধারণের আরও বিশদ নিয়ে অধ্যয়ন করা উচিত এবং সর্বোত্তম বাস্তবায়ন বিকল্পটি কী তা দেখতে আপনার ব্যবহারের ক্ষেত্রে বিশ্লেষণ করা উচিত

আপনি হবে অবশ্যই, যেমন ইঞ্জিন অন্যান্য উপাদান, আছে MemoryManager , ResourceLoader তাই তারা / আন-নির্দিষ্ট মডেলের / শেডার / টেক্সচার হিসাবে প্রয়োজন লোড পারে যা উভয় ভিডিও ও র্যাম মেমোরি ব্যবহার যত্ন নিতে হবে ইত্যাদি। এর জন্য ধারণাগুলিতে মেমরি ক্যাচিং, মেমরি ম্যাপিং ইত্যাদি অন্তর্ভুক্ত রয়েছে each প্রতিটি উপাদান সম্পর্কে প্রচুর বিবরণ এবং ধারণা রয়েছে।

অন্যান্য গেম ইঞ্জিনগুলির আরও বিশদ বিবরণটি দেখুন, সেগুলির অনেকগুলি রয়েছে এবং তাদের ডকুমেন্টেশনগুলি বেশ উপলভ্য।

তবে হ্যাঁ, ক্লাসগুলি জীবনকে সহজ করে তোলে; আপনার এগুলি পুরোপুরি ব্যবহার করা উচিত এবং এনক্যাপসুলেশন, উত্তরাধিকার, ইন্টারফেস এবং আরও দুর্দান্ত স্টাফ সম্পর্কে মনে রাখা উচিত।


এই আমি উত্তর খুঁজছেন ধরনের ছিল। তবে, যখন আপনি "... র‌্যামে টেক্সচার, মডেল এবং শেডার লোড করুন (প্রয়োজনে) এবং বাফার অবজেক্টস এবং শেডারগুলি আপলোড / সংকলন করুন ..." আমাকে আমার আসল প্রশ্নে ফিরিয়ে নিয়ে আসে; মডেল এবং শেডারগুলির মতো জিনিসগুলিকে আবদ্ধ করতে কি আমার অবজেক্টগুলি ব্যবহার করা উচিত?
সুলিভান

অবজেক্টটি একটি শ্রেণীর উদাহরণ, এবং 'আপনার এগুলি সম্পূর্ণ ব্যবহার করা উচিত'।
এডিন-এম

দুঃখিত, আমি বলতে চাইছিলাম 'আমার কীভাবে অবজেক্ট ব্যবহার করা উচিত'। আমার খারাপ।
সুলিভান

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

আমি মনে করি যে এটিই আমি সেরা উত্তর পাচ্ছি। আপনার সহায়তার জন্য ধন্যবাদ :)
সুলিভান

2

ওপেনজিএল এর মধ্যে ইতিমধ্যে কিছু 'অবজেক্ট' ধারণা রয়েছে।

উদাহরণস্বরূপ, আইডি সহ যে কোনও কিছুই কোনও বস্তু হিসাবে হতে পারে (এছাড়াও 'অবজেক্টস' নামে বিশেষত কিছু জিনিস রয়েছে)। বাফারস, টেক্সচার, ভার্টেক্স বাফার অবজেক্টস, ভার্টেক্স অ্যারে অবজেক্টস, ফ্রেম বাফার অবজেক্টস এবং আরও অনেক কিছু। একটি সামান্য কাজ দিয়ে আপনি তাদের চারপাশে ক্লাস মোড়ানো করতে পারেন। যদি আপনার প্রসঙ্গটি এক্সটেনশানগুলি সমর্থন না করে তবে আপনাকে পুরানো অবহেলিত ওপেনজিএল ফাংশনে ফিরে যাওয়ার সহজ উপায়ও দেয়। উদাহরণস্বরূপ, একটি ভার্টেক্সবফারঅবজেক্ট glBegin (), glVertex3f () ইত্যাদি ব্যবহার করে ফিরে যেতে পারে।

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

আমি আপনাকে ওজিএলপ্লাস দিকে তাকানোর পরামর্শ দিই । এটি ওপেনজিএলের জন্য সি ++ বাইন্ডিং।

এছাড়াও গ্লাকএক্স , এটি কেবল এক্সটেনশন লোডিংয়ের জন্য।

ওপেনজিএল এপিআই মোড়ানো ছাড়াও, আপনি এটির উপরে কিছুটা উচ্চ স্তরের একটি বিল্ডিং করা উচিত।

উদাহরণস্বরূপ একটি উপাদান ম্যানেজার বর্গ যা আপনার সমস্ত শেডারগুলির জন্য দায়বদ্ধ, লোড করা এবং সেগুলি ব্যবহার করে। এছাড়াও এটি তাদের কাছে সম্পত্তি স্থানান্তর করার জন্য দায়বদ্ধ হবে। এইভাবে আপনি কেবল কল করতে পারেন: উপকরণ.উসফং (); material.setTexture (sometexture); material.setColor ()। এটি আরও নমনীয়তার সুযোগ দেয় যেহেতু আপনি ভাগ করা ইউনিফর্ম বাফার অবজেক্টের মতো নতুন জিনিসগুলি ব্যবহার করতে পারবেন কেবল 1 টি বড় বাফার যা আপনার শেডারদের 1 টি ব্লকে ব্যবহার করে এমন সমস্ত বৈশিষ্ট্য রয়েছে তবে যদি এটি আপনাকে সমর্থন না করে তবে প্রতিটি শ্যাডার প্রোগ্রামে আপলোড করতে পিছিয়ে যায়। যদি আপনার সমর্থিত হয় তবে অভিন্ন রুটিন ব্যবহার করে বিভিন্ন শেডার মডেলগুলির মধ্যে আপনার জন্য 1 টি বড় একশব্দ শেডার এবং অদলবদ থাকতে পারে বা আপনি বিভিন্ন ছোট ছোট শেডার ব্যবহার করে ফিরে যেতে পারেন।

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

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


2
"আমি আপনাকে ওজিএলপ্লাস দিকে নজর দেওয়ার পরামর্শ দিচ্ছি Open এটি ওপিজএল-এর সি ++ বাইন্ডিংস" " আমি তার বিরুদ্ধে সুপারিশ করব । আমি আরআইআইকে পছন্দ করি তবে বেশিরভাগ ওপেনজিএল অবজেক্টের জন্য এটি সম্পূর্ণরূপে অনুপযুক্ত। ওপেনলএল অবজেক্টগুলি একটি গ্লোবাল কনস্ট্রাক্টের সাথে সম্পর্কিত: ওপেনএল প্রসঙ্গ। সুতরাং আপনার প্রসঙ্গ না হওয়া পর্যন্ত আপনি এই সি ++ অবজেক্ট তৈরি করতে অক্ষম হবেন এবং প্রসঙ্গটি ইতিমধ্যে ধ্বংস হয়ে গেলে আপনি এই বিষয়গুলি মুছতে পারবেন না। এছাড়াও, এটি এমন মায়া দেয় যে আপনি বিশ্বব্যাপী রাষ্ট্র পরিবর্তন না করে অবজেক্টগুলিকে সংশোধন করতে পারবেন। এটি মিথ্যা (যদি আপনি EXT_DSA ব্যবহার না করেন)।
নিকল বোলাস

@ নিকলবোলাস: আমি কি কোনও প্রসঙ্গ আছে কিনা তা পরীক্ষা করে দেখতে পারি এবং কেবল তখনই আরম্ভ করব? অথবা সম্ভবত কেবল পরিচালকদের এমন বিষয়গুলি তৈরি করার অনুমতি দেবে যার জন্য একটি ওপেনএল প্রসঙ্গে প্রয়োজন? --- বিটিডব্লিউ, টিউটোরিয়ালের দুর্দান্ত সেট (আপনার প্রোফাইলের লিঙ্ক)! ওপেনজিএল / গ্রাফিক্স অনুসন্ধান করার সময় আমি কখনই সেগুলি পেলাম না।
সমুরসার

@ সমরসা: কি শেষ? যদি আপনার ওপেনলএল অবজেক্টগুলির জন্য পরিচালক থাকে তবে ... আপনার সত্যিকার অর্থে অবজেক্টগুলি নিজের যত্ন নেওয়ার দরকার নেই; পরিচালক তাদের জন্য এটি করতে পারেন। এবং যদি আপনি কেবল তখনই প্রাসঙ্গিক উপস্থিতি এগুলিকে আরম্ভ করেন, আপনি যদি সঠিকভাবে আরম্ভ করা হয়নি এমন কোনও অবজেক্টটি ব্যবহার করার চেষ্টা করেন তবে কী হবে? এটি কেবল আপনার কোডবেসে দুর্বলতা তৈরি করে। কিংবা বিশ্বব্যাপী রাষ্ট্রকে স্পর্শ না করেই এই বিষয়গুলি সংশোধন করার ক্ষমতা সম্পর্কে আমি যা বলেছিলাম তাতে কোনও পরিবর্তন হয় না।
নিকল বোলাস

@ নিকলবোলাস: "আপনি এই সি ++ অবজেক্ট তৈরি করতে সক্ষম হবেন না যতক্ষণ না আপনার প্রসঙ্গ হবে" ... খালি ওপেনএল কনস্ট্রাক্ট ব্যবহারের চেয়ে আলাদা কি এটি? আমার দৃষ্টিতে oglplus::Contextশ্রেণি এই নির্ভরশীলতাটিকে অত্যন্ত দৃশ্যমান করে তোলে - সমস্যা কি হবে? আমি বিশ্বাস করি এটি নতুন ওপেনলএল ব্যবহারকারীদের প্রচুর সমস্যা এড়াতে সহায়তা করবে।
xtofl

1

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

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

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

তবে এই আকার সম্পর্কে নিজেকে মিথ্যা বলবেন না, 10 কে লাইন অ্যাপ্লিকেশনটিতে ইউনিটির অবজেক্ট মডেলটি নকল করার চেষ্টা করবেন না, ফলাফলটি সম্পূর্ণ বিপর্যয় হবে। স্তরগুলি ধীরে ধীরে তৈরি করুন, যখন প্রয়োজন হয় তখন কেবল বিমূর্ত স্তরগুলির সংখ্যা বাড়ান।


0

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


6
"আপনি যেমন দুর্দান্ত কোডিং অনুশীলনটি অনুসরণ করতে কারম্যাকের উপর নির্ভর করতে পারেন" ওহে মানুষ, এটি বেশ ভাল। কারম্যাক দুর্দান্ত সি ++ কোডিং অনুশীলন অনুসরণ করে। দাঙ্গা! ওহ ... তুমি মজা করছ না উম ... আপনি কি কখনও তার কোডটি দেখেছেন ? সে একজন সি প্রোগ্রামার এবং সে এভাবেই চিন্তা করে। যা সি এর জন্য ঠিক আছে, তবে প্রশ্নটি সি ++ সম্পর্কে ।
নিকল বোলাস

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