ওপেনগিএলে glLoadIdentity () কী করে?


132

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

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

এছাড়াও glMatrixMode(GL_PROJECTION)ভিএস সম্পর্কে কিছুটা বিভ্রান্ত glMatrixMode(GL_MODELVIEW)

উত্তর:


139

প্রজেকশন এবং মডেলভিউ ম্যাট্রিক্সের ক্ষেত্রে পরিচয় ম্যাট্রিক্স মূলত ম্যাট্রিক্সটিকে তার ডিফল্ট অবস্থায় ফিরিয়ে দেয়।

আপনি যেমন আশাবাদী জানেন, glTranslateএবং glRotateসর্বদা ম্যাট্রিক্সের বর্তমান অবস্থার সাথে আপেক্ষিক। উদাহরণস্বরূপ, যদি আপনি কল করেন তবে আপনি glTranslateম্যাট্রিক্সের বর্তমান 'অবস্থান' থেকে অনুবাদ করছেন, উত্স থেকে নয়। তবে আপনি যদি শুরুতে শুরু করতে চান, আপনি যখন কল করবেন glLoadIdentity()তখনই আপনি glTranslateম্যাট্রিক্স থেকে শুরু করতে পারেন যা এখন উৎপত্তিস্থলে রয়েছে বা glRotateম্যাট্রিক্স থেকে এখন ডিফল্ট দিকনির্দেশিত।

আমি মনে করি বুনের উত্তর, এটি 1 এর সমতুল্য, ঠিক সঠিক নয়। ম্যাট্রিক্সটি আসলে এটির মতো দেখাচ্ছে:

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

এটাই পরিচয় ম্যাট্রিক্স। বুন সঠিক, গাণিতিকভাবে, যে কোনও ম্যাট্রিক্স সেই ম্যাট্রিক্সের সাথে গুণিত হয়েছে (বা এমন ম্যাট্রিক্স যা এরকম দেখতে লাগে; ডায়াগোনালগুলি, অন্য সমস্ত 0s) এর ফলাফল মূল ম্যাট্রিক্সের ফলস্বরূপ হবে তবে আমি বিশ্বাস করি না যে তিনি কেন এটি গুরুত্বপূর্ণ তা ব্যাখ্যা করেছিলেন।

কেন এটি গুরুত্বপূর্ণ তা কারণ ওপেনজিএল প্রতিটি ম্যাট্রিক্সের মাধ্যমে সমস্ত অবস্থান এবং আবর্তনকে গুণ করে; সুতরাং উদাহরণস্বরূপ আপনি যখন বহুভুজ আঁকেন ( glBegin(GL_FACE)কিছু পয়েন্ট glEnd()), এটি মোডেলভিউ দিয়ে গুণ করে এটি "ওয়ার্ল্ড স্পেস" এ অনুবাদ করে এবং তারপরে প্রজেক্ট ম্যাট্রিক্সের সাথে গুণ করে এটি 3D থেকে 2D এ অনুবাদ করে এবং এটি দেয় স্ক্রিনে 2 ডি পয়েন্ট, গভীরতার সাথে (স্ক্রিন 'ক্যামেরা' থেকে) যা পিক্সেল আঁকতে ব্যবহার করে। কিন্তু যখন এই ম্যাট্রিকগুলির মধ্যে একটি আইডেন্টিটি ম্যাট্রিক্স হয়, পয়েন্টগুলি পরিচয় ম্যাট্রিক্সের সাথে গুণিত হয় এবং তাই পরিবর্তিত হয় না, সুতরাং ম্যাট্রিক্সটির কোনও প্রভাব নেই; এটি পয়েন্টগুলি অনুবাদ করে না, এটি ঘোরায় না, এটি তাদের যেমন রয়েছে তেমন ছেড়ে দেয়।

আমি আশা করি এটি আরও কিছুটা স্পষ্ট করে!


1
তার অর্থ, ওপেনজিএল একটি 'মাস্টার' বা 'গ্লোবাল' ম্যাট্রিক্স বজায় রাখে এবং পরবর্তী প্রতিটি ম্যাট্রিক্স সেই 'মাস্টার' বা 'গ্লোবাল' ম্যাট্রিক্সের তুলনায় প্রয়োগ করা হয়। আমি কি সঠিক?
ব্যবহারকারী 366312

41

পরিচয়ের ম্যাট্রিক্স সংখ্যার জন্য 1 এর সমতুল্য। যেহেতু আপনি জানেন যে 1 এর সাথে গুণিত কোনও সংখ্যা নিজেই (e.g. A x 1 = A),

একই জিনিস ম্যাট্রিক্সের জন্য যায় ( MatrixA x IdentityMatrix = MatrixA)

সুতরাং ম্যাট্রিক্স স্ট্যাকের সাথে আরও ম্যাট্রিক্সগুলি গুণিত করার আগে একটি পরিচয় ম্যাট্রিক্স লোড করা আপনার ম্যাট্রিক্সকে সঠিক অবস্থায় শুরু করার একটি উপায়।

glMatrixMode(GL_PROJECTION) : দৃষ্টিভঙ্গি রূপান্তর বা অরথোগোনাল রূপান্তর দ্বারা ব্যবহৃত ম্যাট্রিকগুলির সাথে ডিল করে।

glMatrixMode(GL_MODELVIEW): মডেল-ভিউ রূপান্তর দ্বারা ব্যবহৃত ম্যাট্রিকগুলি নিয়ে ডিল করে। এটি হ'ল আপনার অবজেক্ট (ওরফে মডেল) কে ভিউ কোঅর্ডিনেট স্পেস (বা ক্যামেরা স্পেস) এ রূপান্তর করা।


6

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

মডেলভিউ ম্যাট্রিক্স হিসাবে, এটি আপনার বিশ্বের মডেলগুলিতে (অবজেক্ট) বিভিন্ন রূপান্তর করতে ব্যবহৃত হয়। এটির মতো আপনাকে কেবল একবার আপনার অবজেক্টের সংজ্ঞা দিতে হবে এবং তারপরে এটি অনুবাদ বা এটিকে ঘোরানো বা স্কেল করতে হবে।

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

নাম মডেলভিউ হিসাবে এটির মডেলিং এবং দেখার রূপান্তরগুলির দ্বৈততার সাথে সম্পর্কযুক্ত। যদি আপনি ক্যামেরাটি 5 ইউনিট পিছনে আঁকেন, বা অবজেক্টটি 5 ইউনিটটি এগিয়ে নিয়ে যান তবে এটি মূলত একই।

আশা করি আমি কিছুটা আলোকপাত করেছি


2

পরিচয় ম্যাট্রিক্স একটি বুদ্ধিমান ডিফল্ট একটি ম্যাট্রিক্স "আরম্ভ" করতে ব্যবহৃত হয়।

একটি গুরুত্বপূর্ণ জিনিসটি বুঝতে হবে যে ম্যাট্রিক্সের গুণগুলি এক অর্থে, সংযোজনীয়। উদাহরণস্বরূপ, আপনি যদি একটি ম্যাট্রিক্স গ্রহণ করেন যা পরিচয় ম্যাট্রিক্স দিয়ে শুরু হয়, এটি একটি ঘূর্ণন ম্যাট্রিক্সের চেয়ে বহুগুণ হয়, তারপরে এটি একটি স্কেলিং ম্যাট্রিক্সের চেয়ে বহুগুণ হয়, আপনি এমন একটি ম্যাট্রিক্স দিয়ে শেষ করেন যা এর সাথে গুণিত ম্যাট্রিকগুলিকে ঘোরানো এবং স্কেল করে।


0

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

glLoadIdentity () হ'ল একটি অবহেলিত ফাংশন, এবং আপনাকে নিজের ম্যাট্রিকগুলি পরিচালনা করতে উত্সাহিত করা হবে।


-1

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

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