ওপেনজিএল সমন্বয় ব্যবস্থাটি কি বাম-হাত বা ডান-হাত?


88

আমি ওপেনএল সমন্বিত সিস্টেমটি বোঝার চেষ্টা করছি। তবে কিছু টিউটোরিয়াল বলছে যে ডিফল্ট সমন্বয় ব্যবস্থা বাম হাতে রয়েছে (দেখুন http://www.c-sharpcorner.com/UploadFile/jeradus/OpenGLBasics11172005014307AM/OpenGLBasics.aspx ) এবং অন্যরা বলেছেন যে এটি ডান হাতে রয়েছে (দেখুন http: // www .ফালআউটসফটওয়্যার.কম / টিউটোরিয়ালস / গ্লোবাল / গ্ল0htm )। যা সঠিক? আমি বুঝতে পারি যে আমরা মিরর দিয়ে একটি অন্যকে রূপান্তর করতে পারি তবে আমি ডিফল্ট স্থানাঙ্কগুলি জানতে চাই।



4
আপনি কীভাবে শেডারে আপনার রূপান্তরগুলি লেখেন এবং এর ফলে পুরোপুরি আপনার উপর নির্ভর করে এটি কি পুরোপুরি নির্ভর করে না?
jcoder

কেবল আমার দুটি সেন্ট evl.uic.edu/ralph/508S98/coordinates.html , এটিতে কয়েকটি স্ব- বর্ণনামূলক চিত্র রয়েছে।
rraallvv

আমি মনে করি না আপনি নিজের গৃহীত উত্তর আপডেট করার বিষয়টি বিবেচনা করবেন?
জোনাথন মে

উত্তর:


133

এখানে কিছুটা বিভ্রান্তি রয়েছে।

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

ওপেনজিএল ডান হাতের অবজেক্ট স্পেস এবং ওয়ার্ল্ড স্পেসে রয়েছে।

তবে উইন্ডো স্পেসে (ওরফে স্ক্রিন স্পেস) আমরা হঠাৎ বাম হাতছাড়া হয়ে যাই ।

এটা কীভাবে হল ?

আমরা যেভাবে থেকে পেতে বাম-হাতি থেকে ডানহাতি একটি নেতিবাচক z- র স্কেলিং এন্ট্রি glOrthoবা glFrustumঅভিক্ষেপ ম্যাট্রিক্স। স্কেলিং z -1 দ্বারা (এক্স এবং y রেখে যাওয়ার সময়) স্থানাঙ্ক ব্যবস্থার হ্যান্ডনেস পরিবর্তন করার প্রভাব ফেলে has

GlFrustum এর জন্য,

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

এ পর্যন্ত এবং কাছাকাছি ইতিবাচক, সাথে থাকতে অনুমিত হয় পর্যন্ত > কাছাকাছিদূরে বলুন = 1000 এবং কাছাকাছি = 1। তারপরে সি = - (1001) / (999) = -1.002।

আরও বিশদ এবং ডায়াগ্রামের জন্য এখানে দেখুন ।

একটি থেকে বানানতত্ত্ব দৃষ্টিকোণ , glOrtho এই মত একটি ম্যাট্রিক্স উত্পন্ন:

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

এখানে, বাম , ডান , নীচে এবং শীর্ষগুলি কেবল বাম উল্লম্ব , ডান উলম্ব , নীচে অনুভূমিক , শীর্ষ অনুভূমিক ক্লিপিং প্লেন (রেস) এর স্থানাঙ্ক

কাছাকাছি এবং এ পর্যন্ত প্লেন অবশ্য ভিন্নভাবে উল্লিখিতকাছাকাছি প্যারামিটার হিসাবে সংজ্ঞায়িত করা হয়

  • কাছাকাছি: কাছাকাছি গভীরতার ক্লিপিং বিমানের দূরত্ব । এই দূরত্বটি যদি দর্শকের পিছনে থাকে তবে এটি নেতিবাচক।

এবং এখন পর্যন্ত:

  • zFar আরও গভীর গভীরতা ক্লিপিং বিমানের দূরত্ব । এই দূরত্বটি যদি দর্শকের পিছনে থাকে তবে এটি নেতিবাচক।

এখানে আমাদের একটি সাধারণ ক্যানোনিকাল ভিউ ভলিউম রয়েছে

ক্যানোনিকাল

Z গুণকটি (-2 / (সুদূর নিকটবর্তী)) হওয়ায়, বিয়োগ চিহ্নটি কার্যকরভাবে z -1 দ্বারা স্কেল করে । এর অর্থ হল যে ভিউ রূপান্তরকালে "জেড" বাঁদিকে পরিণত হয়, বেশিরভাগ লোকেরই অজানা কারণ তারা কেবল ওপেনজিএলে "ডান হাতের" সমন্বয় ব্যবস্থা হিসাবে কাজ করে।

সুতরাং, যদি আপনি কল

glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,

তারপরে নিয়ার প্ল্যান আপনার চেয়ে 10 ইউনিট এগিয়ে । তুমি কোথায়? কেন, উৎপত্তিস্থলে, আপনার ডানদিকে এক্স-অক্ষের সাহায্যে, আপনার মাথার শীর্ষে y- অক্ষ এবং আপনার নাকটি নেতিবাচক জেড-অক্ষকে নির্দেশ করছে (এটি ডিফল্ট "ডিফল্টরূপে, ক্যামেরাটি মূলদিকে অবস্থিত , নেতিবাচক জেড-অক্ষটি নির্দেশ করে এবং এর একটি আপ-ভেক্টর (0, 1, 0) থাকে "" )। সুতরাং কাছাকাছি বিমানটি z = -10 এ রয়েছে। দূরে সমতলটি আপনার পিছনে 10 ইউনিট, z = + 10 এ রয়েছে


4
"ফরোয়ার্ড ভেক্টরটি গ্লুলুকএটে অবহেলিত" - আপনি কি নিশ্চিত করতে পারবেন যে এটিই কেস? গ্লুপ্রসেক্টিভ বা গ্লোফ্রাস্টম বা গ্লো অর্থমো নয়?
কোস

4
আমরা কেবল উইন্ডো স্পেস নয় ক্লিপ স্পেস থেকে হঠাৎ বাম হাতের দিকে চলে এসেছি
কিংবদন্তি

4
পুরো উত্তরের জন্য +1, -1 (অপেক্ষা করুন, বরং -2) "ডান হাত থেকে বাম-হাতের যে দিকটি আমরা পেয়েছি তা হ'ল কারণ ফরোয়ার্ড ভেক্টরটি গ্লুলুকএট () এর স্ট্যান্ডার্ড বাস্তবায়নে অবহেলিত, যা ফাংশন প্রত্যেকে ভিউ ম্যাট্রিক্স তৈরি করতে ব্যবহার করে When , যা নিছক আবর্জনা ...
খ্রিস্টান রাউ

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

4
@ বোবোবো আপনার বক্তব্যটি যদি আপনি কেবল ঘূর্ণন এবং অনুবাদ ফাংশনগুলি ব্যবহার করে আপনার ভিউ ম্যাট্রিক্সটি গণনা করেন (তবে আমি অনুমান করি যে আপনি হস্তান্তর পরিবর্তনের জন্য অভিযুক্ত হন না), পরিবর্তে কোনও gluLookAtভিত্তি পরিবর্তিত হতে পারে না gluLookAt? অবশ্যই না (যেহেতু আপনি সম্ভবত জানেন যে "প্রত্যেকে"gluLookAt ভিউ ম্যাট্রিক্স গণনার জন্য ব্যবহার করে না ) যেহেতু আপনার জানা উচিত যে gluLookAtঘূর্ণন এবং অনুবাদ কলগুলির একগুচ্ছ ব্যতীত আর কিছুই করেন না (তারা এমনকি "উচ্চ স্তরের" শব্দ "পরিবর্তনের পরিবর্তে ছদ্মবেশ ধারণ করেছেন ) ভিত্তি " ) এতে নিখুঁত কোনও প্রতিচ্ছবি জড়িত না।
খ্রিস্টান রাউ

26

ডিফল্টরূপে নরমালাইজড ডিভাইস স্থানাঙ্ক বাম-হাতের হয়।

GlDepthRange ডিফল্টরূপে [0, 1] (কাছাকাছি, অনেকদূর) পর্দায় + z অক্ষকে পয়েন্ট করে এবং + x দিয়ে ডানদিকে এবং + y আপ এটি একটি বাম হাতের সিস্টেম।

গভীরতার পরিসীমা [1, 0] এ পরিবর্তন করা সিস্টেমকে ডানহাতে তৈরি করবে।

নিকোলের পূর্ববর্তী উত্তর উদ্ধৃত করে : (ধর্মঘটটি আমার কাজ, নীচে ব্যাখ্যা করা হয়েছে)

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

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

উইন্ডোটির স্থানটি একটি উইন্ডোর পিক্সেলের স্পেসে রয়েছে। উত্সটি নীচের বাম কোণে রয়েছে, + ওয়াই উপরে এবং + এক্স ডান দিকে যাচ্ছে। এটি খুব ডান হাতের সমন্বিত সিস্টেমের মতো শোনাচ্ছে। তবে জেড সম্পর্কে কী?

ডিফল্ট গভীরতা পরিসীমা (glDepthRange) 0 কাছে জেড মান এবং পর্যন্ত জেড মান সেট করে এক । সুতরাং + জেড দর্শকের থেকে দূরে চলেছে ।

এটি একটি বাম হাত সমন্বয় ব্যবস্থা। হ্যা, তুমি পারোগভীরতার পরীক্ষাটি GL_LESS থেকে GL_GREATER এ পরিবর্তন করুন এবংglDepthRange [0, 1] থেকে [1, 0] এ পরিবর্তন করুন। তবে ওপেনজিএল- এর ডিফল্ট রাষ্ট্রটি বাম-হাত সমন্বিত সিস্টেমে কাজ করা। এবং ক্লিপ-স্থান থেকে উইন্ডো স্পেসে পৌঁছানোর জন্য প্রয়োজনীয় কোনও রূপান্তর জেডকে অস্বীকার করে So হ্যান্ডসনেসটি পিন করা শক্ত)।

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

আমার সন্দেহ হয় যে মাইক্রোসফ্ট (এবং গ্লাইড) কেবল তাদের প্রজেকশন ম্যাট্রিকগুলিতে প্রত্যাখ্যান করতে বিরত হয়নি।

এটি আমার অনুসন্ধান থেকে সরে যাওয়ার পরে আমি একটি অংশ আঘাত করেছি।

হয় DepthRange বা DepthFunc পরিবর্তন করা এবং ClearDepth (0) ব্যবহার করে কাজ করে তবে উভয় ব্যবহার করার সময় তারা একে অপরকে বাম-হাতের সিস্টেমে ফিরে বাতিল করে দেয়।


গভীরতার পরিসর [1, -1] হতে পারে না। আমি মনে করি আপনি বোঝাতে চেয়েছিলেন [1, 0] এছাড়াও, এটি আগে চিহ্নিত করা হয়েছে
নিকল বোলাস

আপনার উত্তর দুর্দান্ত, ডাইরেক্টএক্স প্রশ্নের পক্ষে খুব খারাপ, আপনার এটি এখানে পোস্ট করা উচিত!
hultqvist

4
@ সিগটাইম কেন আপনি ভাবেন যে কোনও মিথ্যা বিবৃতি সংশোধন করা মূল্যহীন নয়? ভার্টেক্সের স্থানাঙ্ক এবং ম্যাট্রিক্স রোটেশন জেনারেশনের সমস্যা সমাধানের জন্য আমি বেশ কয়েক ঘন্টা ব্যয় করেছি কেবলমাত্র এটি জানতে যে ডিফল্ট স্থানাঙ্ক ব্যবস্থা বাস্তবে ডানহাতে ছিল না।
hultqvist

4
প্রশ্নটি ছিল এটি একটি বাম- বা ডান-হাতের সিস্টেম। এই উত্তরের চেয়ে আরও বিশদ রয়েছে, ডানহাতি পেতে আরও দুটি উপায় ব্যাখ্যা করে, ম্যাট্রিক্স রূপান্তরে একটি -1 যুক্ত করা এটি করার আরেকটি উপায়। তবে এর মধ্যে কোনওটিই যদি গুরুত্ব দেয় না যে সিস্টেমটি ডিফল্টরূপে ডানহাতে রয়েছে, আপনি কেবলমাত্র কিছু পরিবর্তন করতে পারবেন যদি আপনি জানেন যে আপনি কী থেকে পরিবর্তন করছেন। তবুও
hultqvist

4
আমি উত্তরটি খুব আলোকিত পেয়েছি, এবং এটি অনুসন্ধানগুলিতে উঠে এসেছে সুতরাং এটি আমার পক্ষে মূল্যবান।
ওপেনজিএল ইএস

13

কেবল এনডিসি

আপনার কেবল খেয়াল করা উচিত যে ওপেনজিএল কেবল এনডিসি জানে! এবং এটি একটি বাম-হাত সমন্বিত সিস্টেম।

আপনি যে সমন্বয় ব্যবস্থাটি ব্যবহার করেন তা বিবেচনাধীন নয় - বাম-হাত বা ডান হাতের অক্ষ-সমন্বয় ব্যবস্থা - সমস্তটি এনডিসিতে মিরর করা দরকার। যদি আপনি চান, আপনি বিশ্ব-স্থান পুরোপুরি বাম-হাতের সমন্বয় ব্যবস্থা হিসাবে পরিচালনা করতে পারেন।

কেন আমরা সাধারণত বিশ্ব-স্থানে ডান-হাত সমন্বিত ব্যবস্থা ব্যবহার করি?

আমি মনে করি এটি প্রচলিত। এটা ঠিক আছে। এটি কেবল ডাইরেক্টএক্স থেকে আলাদা করতে চায়।


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

4
যদিও এটি "সাধারণকরণের ডিভাইস স্থানাঙ্ক" শব্দগুলি অন্তর্ভুক্ত করার জন্য পুনরাবৃত্তি করা তবে এটি আরও ভাল লাগবে।
টমি 20

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

এটি পুরোপুরি সঠিক নয়। ওপেনজিএল ক্লিপিং সমন্বয় ব্যবস্থাটিও জানে, যেহেতু ক্লিপিং এর মধ্যে ঘটে। ক্লিপ সমন্বয় ব্যবস্থা এনডিসি সমন্বয় সিস্টেমের মতো একই হ্যান্ডনেস আছে।
প্লাজম্যাসেল

7

কৌচি মাৎসুদা র "ওয়েবজিএল প্রোগ্রামিং গাইড" বইটি "ওয়েবজিএল / ওপেনগল: বাম বা ডান হাতে?" এর প্রায় দশটি পৃষ্ঠা ব্যয় করে?

বই অনুসারে:

  • অনুশীলনে, বেশিরভাগ লোক ডানহাতি সিস্টেম ব্যবহার করে

  • ওপেনজিএল আসলে অভ্যন্তরীণভাবে একটি বাম-হাতের সিস্টেম

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

আমি "এটি নয়" এর সাথে পুরোপুরি একমত নই তবে এটি সম্ভবত কোনও দার্শনিক প্রশ্ন।


7
The order in which you draw things determines what is drawn on top (draw a triangle first, then a quad, the quad overrides the triangle). গভীর সত্য পরীক্ষা করার অভাবে এটি সত্য। গভীরতা পরীক্ষার উপস্থিতিতে, একটি খণ্ডের জেড মানকে গভীরতার বাফারের মানের সাথে তুলনা করা হয় এবং গভীরতা পরীক্ষায় ব্যর্থ হলে খণ্ডটি বাতিল করা হয়, সুতরাং কোয়াড তাদের গভীরতার উপর নির্ভর করে ত্রিভুজটি ওভাররাইট করতে পারে এবং গভীরতা ফাংশন ব্যবহৃত।
chrisvarnz

3

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

সম্পাদনা: আপনি যদি আমাকে বিশ্বাস না করেন তবে একটি অনুবাদ ম্যাট্রিক্স যুক্ত করে কেবল আপনার ভার্টেক্স শ্যাডারে পরীক্ষা করুন এবং আপনি সহজেই দেখতে পাবেন যে ওপেনগেল বাম-হস্ত আছে কিনা।


0

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

গভীরতা বাফারটি একেবারে বিপরীত এবং এটি হ'ল এনডিসি (নরমালাইজড ডিভাইস সমন্বয়) কার্যকর হয়। যদি GL_LESS কে glDepthFunc এ পাস করার অর্থ পিক্সেলগুলি আঁকবে যখন তারা আপনার কাছে ডিপথ বাফারে রয়েছে তার তুলনায় আরও নিকটবর্তী, তখন পিক্সেলগুলি বাম-হাত সমন্বিত সিস্টেমে লাইভ বলে মনে করা হয় ।

আরও একটি সমন্বয় ব্যবস্থা আছে এবং এটি ভিউপোর্ট! ভিউপোর্টের সমন্বিত সিস্টেমটি এমন যে ডানদিকে + এক্স পয়েন্ট এবং + y পয়েন্ট নীচে। আমি মনে করি এই মুহুর্তে হ্যান্ডসনেসটি মোটা হয়ে গেছে যেহেতু আমরা এই মুহুর্তে কেবল এক্স, ওয়াইয়ের সাথে কাজ করছি।

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

কিছু চিবিয়ে দাও। ডান হাতের স্থানাঙ্ক সিস্টেমের z দিকনির্দেশকে একটি ফরোয়ার্ড ভেক্টর বলা খুব বেশি অর্থবোধ করে না। আমি মনে করি তারা ডাইরেক্ট 3 ডি ডিজাইন করার সময় মাইক্রোসফ্ট এটি উপলব্ধি করেছিল।

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