কেন আমরা ক্যামেরার পরিবর্তে বিশ্বকে সরিয়ে দেব?


87

আমি শুনেছি একটি ওপেনলএল খেলায় আমরা খেলোয়াড়কে নড়াচড়া করতে যা করি তা হ'ল ক্যামেরাটি সরানো নয়, পুরো বিশ্বকে ঘুরে বেড়ানো।

উদাহরণস্বরূপ, এখানে এই টিউটোরিয়ালটির একটি নির্যাস রয়েছে: ওপেনএল ভিউ ম্যাট্রিক্স

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

আমরা কেন ওটা করি।


1
একটি ক্যামেরা একটি অভিক্ষেপ দৃশ্য ছাড়া কিছুই উপস্থাপন করে। আপনি যে প্রক্ষেপণটি চান তা পেতে আপনি পৃথিবীকে রূপান্তরিত করেন। ধারণাটি অদ্ভুত, তবে এটি আসলে
একরকম

@ শরথিস, আমি ভাল উত্তর দিয়ে আমার উত্তরটি উন্নত করেছি। গণিত এবং 3 ডি ক্যামেরা (ভার্চুয়াল ক্যামেরা) বিকল্পের সাথে যুক্ত প্রক্ষেপণ দৃষ্টিভঙ্গি। আপনার এবং অন্যদের জন্য সহায়ক হতে পারে।
মোঃ মাহবুবুর রহমান

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

উত্তর:


72

কেন?

কারণ, একটি ক্যামেরা একটি প্রক্ষেপণ দৃশ্যের প্রতিনিধিত্ব করে।

তবে থ্রিডি ক্যামেরা (ভার্চুয়াল ক্যামেরা) এর ক্ষেত্রে ক্যামেরা বিশ্বের পরিবর্তে চলে। আমি এই উত্তর পরে একটি বিস্তারিত ব্যাখ্যা করেছি।

গাণিতিকভাবে বোঝা

প্রজেকশন ভিউ স্থানের চারপাশে চলে এবং তার অভিমুখ পরিবর্তন করে। প্রথমে লক্ষ্য করার বিষয়টি হ'ল স্ক্রিনে কাঙ্ক্ষিত প্রজেকশন দেখার দিক দিয়ে পরিবর্তন হয় না।

এই কারণে, আমরা পছন্দসই অভিক্ষেপ পেতে অন্যান্য জিনিস রূপান্তর করি।

Http://opengl.org থেকে বোঝা

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

Http://open.gl থেকে বোঝা

এছাড়াও http://open.gl/transformations এর ম্যাট্রিক্স অংশ থেকে নিম্নলিখিত লাইনগুলি ভাগ করতে চান

একটি ক্যামেরার রূপান্তর অনুকরণ করতে, আপনাকে আসলে সেই রূপান্তরটির বিপরীতটি দিয়ে বিশ্বকে রূপান্তর করতে হবে। উদাহরণ: আপনি যদি ক্যামেরাটি উপরে নিয়ে যেতে চান তবে আপনাকে পরিবর্তে বিশ্বকে সরিয়ে নিতে হবে।

দৃষ্টিকোণ দ্বারা বোঝা

বাস্তব বিশ্বে আমরা জিনিসগুলিকে এমনভাবে দেখি যা "দৃষ্টিভঙ্গি" বলে।

দৃষ্টিভঙ্গি এমন ধারণাটিকে বোঝায় যেগুলি আপনার কাছাকাছি অবস্থিত বস্তুগুলির থেকে আরও দূরে অবস্থিত objects দৃষ্টিভঙ্গির অর্থ হ'ল আপনি যদি সরল রাস্তার মাঝখানে বসে থাকেন তবে আপনি রাস্তার সীমানা দুটি রূপান্তরকারী রেখা হিসাবে দেখতে পাচ্ছেন।

এটাই দৃষ্টিকোণ। থ্রিডি প্রকল্পগুলিতে দৃষ্টিভঙ্গি গুরুত্বপূর্ণ। দৃষ্টিকোণ ছাড়াই 3 ডি ওয়ার্ল্ডটি আসল দেখাচ্ছে না।

এটি প্রাকৃতিক এবং সুস্পষ্ট বলে মনে হতে পারে, তবে এটি বিবেচনা করা গুরুত্বপূর্ণ যে আপনি যখন কম্পিউটারে 3 ডি রেন্ডারিং তৈরি করেন আপনি কম্পিউটার স্ক্রিনে 3 ডি ওয়ার্ল্ডকে সিমুলেট করার চেষ্টা করছেন যা 2D পৃষ্ঠের একটি পৃষ্ঠ।

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

সুতরাং, যখন থ্রিডি রেন্ডারিং ব্যবহার করে কোনও দৃশ্যের 3D তে অনুকরণ করতে এবং তারপরে আপনার স্ক্রিনের 2D পৃষ্ঠের উপরে 3 ডি দৃশ্যের প্রজেক্ট করা হয়, তখন প্রক্রিয়াটিকে দৃষ্টিভঙ্গি প্রক্ষেপণ বলা হয়।

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

গণিতে দৃষ্টিভঙ্গি অনুবাদ করা

আপনি নিম্নোক্ত চিত্রটিতে চিত্রটি দেখে, ধারণা করুন যে কোনও উপাদান আপনার 3D দৃশ্যে অবস্থান করছে। থ্রিডি ওয়ার্ল্ডে, আই-পয়েন্টের উত্সের সাথে 3 ডি স্থানাঙ্ক সিস্টেমকে উল্লেখ করে, অবজেক্টের অবস্থানটি xW, yW, zW হিসাবে বর্ণনা করা যেতে পারে। স্ক্রিন ছাড়িয়ে 3 ডি দৃশ্যে বস্তুটি আসলে সেখানে অবস্থান করছে।

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

দর্শকের পর্দায় এই অবজেক্টটি দেখার সাথে সাথে থ্রিডি অবজেক্টটি এক্সপি এবং ওয়াইপি হিসাবে বর্ণিত একটি 2D পজিশনে "অভিক্ষিপ্ত" হয়, যা স্ক্রিনের 2D স্থানাঙ্ক ব্যবস্থা (প্রজেকশন প্লেন) উল্লেখ করে।

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

আপনি xW এবং yP, বিশ্ব অবস্থানগুলি xW, এবং yW কে zW দ্বারা ভাগ করে ভবিষ্যদ্বাণী করা অবস্থানগুলি গণনা করতে পারেন:


xP = কে 1 * xW / zW yP = K2 * yW / zW

কে 1 এবং কে 2 হ'ল ধ্রুবক যা জ্যামিতিক কারণগুলি থেকে উত্পন্ন যেমন আপনার প্রক্ষেপণ বিমানের দিক অনুপাত (আপনার ভিউপোর্ট) এবং আপনার চোখের "দেখার ক্ষেত্র", যা প্রশস্ত-কোণ দৃষ্টিভঙ্গির ডিগ্রিকে বিবেচনা করে।

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

Z দ্বারা এই বিভাগটি বিখ্যাত "দৃষ্টিকোণ বিভাজন"।

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

অন্যান্য গুরুত্বপূর্ণ মামলা

  • 3 ডি ক্যামেরা (ভার্চুয়াল ক্যামেরা) এর ক্ষেত্রে, ক্যামেরা বিশ্বের পরিবর্তে চলে।

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

একই চিত্রগ্রহণ প্রক্রিয়াটি একটি 3D ক্যামেরার সাথে ঘটে। আপনার একটি "ভার্চুয়াল" ক্যামেরা দরকার যা আপনার তৈরি করা "ভার্চুয়াল" দৃশ্যের চারপাশে ঘোরাঘুরি করতে পারে।

দুটি জনপ্রিয় শ্যুটিং শৈলীর সাথে একটি চরিত্রের চোখের মাধ্যমে বিশ্ব দেখার (প্রথম ব্যক্তির ক্যামেরা হিসাবে পরিচিত) বা ক্যামেরাকে কোনও চরিত্রের দিকে ইশারা করা এবং তাদের সামনে রাখা (তৃতীয় ব্যক্তি ক্যামেরা হিসাবে পরিচিত) জড়িত।

এটি একটি 3 ডি ক্যামেরার প্রাথমিক ভিত্তি: একটি ভার্চুয়াল ক্যামেরা যা আপনি 3D দৃশ্যের চারপাশে ঘোরাঘুরি করতে এবং নির্দিষ্ট দৃষ্টিকোণ থেকে ফুটেজ রেন্ডার করতে পারেন।

বিশ্ব স্থান এবং দর্শন স্থান বোঝা

এই ধরণের আচরণকে কোড করার জন্য, আপনি কেবলমাত্র বিশ্বের সমন্বিত সিস্টেমের দৃষ্টিকোণ বা অন্য কোনও স্থির দৃষ্টিকোণ থেকে নয়, 3 ডি ওয়ার্ল্ডের সামগ্রীগুলি ক্যামেরার দৃষ্টিকোণ থেকে রেন্ডার করবেন।

সাধারণত বলতে গেলে, একটি 3 ডি দৃশ্যে 3 ডি মডেলের একটি সেট থাকে। মডেলগুলি তাদের নিজস্ব সমন্বিত সিস্টেমে রেফারেন্স করে উল্লম্ব এবং ত্রিভুজগুলির একটি সেট হিসাবে সংজ্ঞায়িত করা হয়। যে জায়গাতে মডেলগুলি সংজ্ঞায়িত করা হয় তাকে মডেল (বা স্থানীয়) স্থান বলা হয়।

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

এই নতুন রেফারেন্স সিস্টেমটিকে "ওয়ার্ল্ড স্পেস" (বা গ্লোবাল স্পেস) বলা হয় it এটি পরিচালনা করার একটি সহজ উপায় হ'ল প্রতিটি বস্তুর সাথে বিশ্ব রূপান্তর ম্যাট্রিক্স যুক্ত করে।

3 ডি ক্যামেরার আচরণ বাস্তবায়নের জন্য আপনাকে অতিরিক্ত পদক্ষেপগুলি সম্পাদন করতে হবে। আপনি বিশ্বকে বিশ্বের উত্স হিসাবে নয় - বরং 3D ক্যামেরার রেফারেন্স সিস্টেমে উল্লেখ করবেন।

একটি ভাল কৌশল ক্যামেরাকে 3 ডি ওয়ার্ল্ডের আসল 3 ডি অবজেক্ট হিসাবে বিবেচনা করা জড়িত। অন্য যে কোনও 3 ডি অবজেক্টের মতো, ক্যামেরাটি 3 ডি ওয়ার্ল্ডে কাঙ্ক্ষিত অবস্থান এবং ওরিয়েন্টেশনে রাখার জন্য আপনি "ওয়ার্ল্ড ট্রান্সফর্ম" ম্যাট্রিক্স ব্যবহার করেন। এই ক্যামেরা ওয়ার্ল্ড ট্রান্সফর্ম ম্যাট্রিক্স ক্যামেরার অবজেক্টটিকে আসল বিশ্বের (xc, yc, zc) পজিশনে এবং ওয়ার্ল্ড রোটেশনে মূল ঘোরের (z-axis বরাবর) অপেক্ষায় আসল থেকে ক্যামেরা অবজেক্টকে রূপান্তর করে।

নিম্নলিখিত চিত্রটি ওয়ার্ল্ড (এক্স, ওয়াই, জেড) সমন্বিত সিস্টেম এবং ভিউ (ক্যামেরা) (x ', y', z ') সমন্বয় সিস্টেমের মধ্যে সম্পর্কগুলি দেখায়।

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


5
অন্যান্য উত্তর আছে। এগুলি আপনার নিজের মধ্যে সম্পাদনা করার দরকার নেই।
জেসি ডরসি

1
@ নোট্রাইন, ধন্যবাদ কীভাবে আন্তঃ পৃষ্ঠা লিঙ্ক তৈরি করবেন তা আমার জানা ছিল না।
মোঃ মাহবুবুর রহমান

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

@ গিলিস, আমার ভুলের জন্য দুঃখিত আমি আমার উত্তর সম্পাদনা করেছি। আমি বিভিন্ন উত্স অধ্যয়ন উত্তর প্রস্তুত করেছি। আপনি উল্লেখ করেছেন এবং আপনাকে অনেক ধন্যবাদ। :)
মোঃ মাহবুবুর রহমান

নোট করুন glMatrixMode()এবং আরও কয়েকটি ফাংশন যা উল্লেখ করা হয়েছে: eng.utah.edu/~cs6360/Lectures/frustum.pdf এবং opengl.org/archives/resources/faq/technical/viewing.htm হ্রাস করা হয়েছে। তবে গাণিতিক বিবরণ সঠিক এবং সহায়ক থেকে যায়।
patryk.beza

28

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

বাস্তব বিশ্বের এবং গেম জগতের অবজেক্টগুলির অবস্থানগুলি কিছু স্থানাঙ্ক ব্যবস্থার সাথে সংজ্ঞায়িত করা হয়। একটি সমন্বিত সিস্টেম অবস্থানের মানগুলিকে অর্থ দেয়। যদি আমি আপনাকে বলি যে আমি "100,50" এ আছি যা আপনাকে সাহায্য করবে না যতক্ষণ না আপনি যদি না জানেন যে এই সংখ্যাগুলির অর্থ কী (তারা কি মাইল, কিলোমিটার, অক্ষাংশ এবং দ্রাঘিমাংশ ইত্যাদি)। যদি তারা কার্টেসিয়ান স্থানাঙ্ক ("সাধারণ" ধরণের স্থানাঙ্ক) থাকে তবে আপনার কী উত্সটি তুলনামূলক তা জানতে হবে; যদি আমি কেবল "আমি পূর্ব থেকে 100 ফুট" বলতে পারি তবে আপনাকে "পূর্বের কী ," জানা দরকার যা স্থানাঙ্ক উত্‍পত্তি বলা হয়।

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

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

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

অবশ্যই ক্যামেরাটির একটি অবস্থান এবং একটি ওরিয়েন্টেশন রয়েছে। সুতরাং যদি কোনও বস্তু 20,100,50 পজিশনে থাকে এবং ক্যামেরা 10,200, -30 পজিশনে থাকে তবে ক্যামেরার সাথে সম্পর্কিত বস্তুর অবস্থান 10,100,80 (ক্যামেরার অবস্থানের সাথে বস্তুর অবস্থান বিয়োগ) হবে। যখন ক্যামেরা কোনও গেমটিতে সরে যায় তখন বিশ্বের স্থানাঙ্কগুলিতে থাকা ক্যামেরার অবস্থানটি আপনি যেমন প্রত্যাশা করতেন ঠিক তেমনভাবে সরানো হয়।

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

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

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


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

ক্যামেরাটি চলাফেরা করে বা বিশ্বটি কোন সমন্বয় ব্যবস্থা সম্পর্কে আপনি কথা বলছেন তা কেবল একটি ফাংশন কিনা তা পরিষ্কার করার জন্য +1।
ডেভিড মোলস

11

অন্য দু'জনের (দুর্দান্ত) উত্তর যুক্ত করার সাথে সাথে আরও কিছু বিশদ উত্তর দিয়েছিল যে মাহবুবুর আর আমান স্পর্শ করেছিলেন: "এখানে কোনও ক্যামেরা নেই"।

এটি বেশ সত্য এবং সাধারণ "ক্যামেরা" উপমা ব্যর্থতার প্রতিনিধিত্ব করে, কারণ "ক্যামেরা" আসলে বিদ্যমান নেই। এটি উপলব্ধি করা গুরুত্বপূর্ণ যে ক্যামেরা সাদৃশ্যটি ঠিক হ'ল - একটি উপমা। জিনিসগুলি পর্দার আড়ালে আসলে কীভাবে কাজ করে তা বর্ণনা করে না (বা বর্ণনা করার ভান করে) doesn't

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

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

তবে, যেহেতু ক্যামেরাটির অস্তিত্ব নেই তাই কেবলমাত্র আপনি দূরত্ব পরিবর্তন করতে পারবেন the সুতরাং আপনি অবজেক্টের দূরত্ব পরিবর্তন করেন এবং খুব একই ফলাফল আসে। যেহেতু সমস্ত বস্তু যেভাবেই রূপান্তরগুলির মধ্য দিয়ে যায় , এটি কম বা বেশি ব্যয়বহুল নয়।

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


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

7

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

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

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

সুতরাং আপনার অ্যাপ্লিকেশনটিতে, আপনি ক্যামেরাটিকে ওয়ার্ল্ড কোর্ডে সরিয়ে নিয়েছেন, ক্যামেরাস ভিউ ম্যাট্রিক্স আপডেট করুন, নতুন ভিউ ম্যাট্রিক্সটিকে ভার্টেক্স শেডারে ইউনিফর্ম বা ব্লকের অংশ হিসাবে পাস করুন, আপনার দৃশ্যের রেন্ডার করুন।


5

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

যাইহোক, আপনি মিশ্রণের মধ্যে দৃশ্যমানতার সংকল্প আনতে শুরু করার পরে, আপনি যে সর্বশেষে করতে চান তা হ'ল পুরো বিশ্বটিকে ক্যামেরার চারপাশে অনুবাদ করা। পরিবর্তে, বেশিরভাগ ক্ষেত্রে (বিশেষত স্থির বিএসপিগুলির মতো ধ্রুপদী ক্ষেত্রে বা এর মতো) আপনি কী দৃশ্যমান হতে পারে তা নির্ধারণ করতে আপনার দৃশ্যমান কাঠামোকে জিজ্ঞাসা করার জন্য বিশ্বের মধ্যে ক্যামেরার অবস্থানটি ব্যবহার করতে যাচ্ছেন এবং তারপরে কেবল সেগুলির অনুবাদ করুন ক্যামেরার স্থানাঙ্কের জায়গাতে জিনিস things


4

আমি মনে করি না যে দাবিটি যথাযথভাবে সত্য, কারণ কোনও একটি খুব কমই একটি গেমটিতে বিশ্বকে স্থানাঙ্কিত করে "চালিত করে", তবে বাস্তবে ভার্চুয়াল ক্যামেরার স্থানাঙ্কগুলিকে পরিবর্তন করে।

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

সেই অর্থে পৃথিবী সরানো হয় নি, তবে ক্লিপ স্পেসের স্থানাঙ্ক ব্যবস্থায় কেবলমাত্র বিশ্বের স্থানাঙ্কগুলি গণনা করা হয়।


2

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


2

এখানে অনেক ভাল উত্তর। আমি তাদের কোনওটির পুনরাবৃত্তি না করার চেষ্টা করব। কখনও কখনও এটি ক্যামেরার ক্ষেত্রে বিবেচনা করা আরও সহজ, যেমন ডাইরেক্ট 3 ডি এটি করে তোলে (দ্রষ্টব্য: 9.0 সি পোস্টের সাথে খুব বেশি খেলেনি)

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

আপনি অবশ্যই একটি ক্যামেরার ক্ষেত্রে 2D গতি সম্পর্কে ভাবতে পারেন, এবং ঠিক এই ধরণের চিন্তাভাবনার প্রক্রিয়াগুলি প্রভাবগুলি খুঁজে পাওয়া সহজ করে তুলতে পারে।


1
দেরীতে, তবে সুন্দর উত্তরও!
ডানিজার

ধন্যবাদ! আমি সর্বদা খুঁজে পেয়েছি যে অনুসন্ধান ইঞ্জিনের মাধ্যমে পাওয়া পৃষ্ঠাগুলিতে আলোচনায় যুক্ত হওয়া আরও প্রশংসিত হবে, বিশেষত যদি তথ্যটি কার্যকর বা আকর্ষণীয় হয়
জো প্লান্ট

2

ওপেনজিএল ডক্সের লেখকগণ থেকে শুরু করে এখানে পুরোপুরি ভুল ধারণা রয়েছে বলে মনে হচ্ছে ...

আমাকে দ্রুত আপনার বিচক্ষণতা পুনরুদ্ধার করতে দাও: পৃথিবী সরবে না , তা রাখা হয়। যে কেউ প্লেয়ারের চারপাশে ঘোরাফেরা হিসাবে বিশ্বকে বাস্তবায়নের চেষ্টা করবে সে দ্রুত মাল্টিপ্লেয়ার মোডে সমস্যায় পড়বে। প্রতিটি খেলোয়াড়ের পদক্ষেপে বিশ্বের লক্ষ লক্ষ (বা বিলিয়ন) অবজেক্টের অবস্থান আপডেট করা বরং বরং ধীর গেমপ্লে করবে ...

সুতরাং, সেখানে সত্যিই কি ঘটেছিল, এবং উদ্ধৃতিটির কী হবে?

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

এখন, খেলোয়াড়ের চোখের সাথে আবদ্ধ অন্য একটি সমন্বয় ব্যবস্থা বিবেচনা করাও সুবিধাজনক। এই সমন্বয় ব্যবস্থায় প্লেয়ার সর্বদা স্থানাঙ্কে থাকে (0,0,0), এবং বিশ্ব তার চারপাশে ঘোরাফেরা করে। সুতরাং আপনি যদি প্লেয়ারের সমন্বিত সিস্টেমে তৈরি করা হিসাবে বুঝতে পারেন তবে উদ্ধৃতিটি সঠিক ।

তবে বিশ্ব প্লেয়ারের স্থানাঙ্কে কাজ করে না, এটি বিশ্বের স্থানাঙ্কগুলিতে কাজ করে। এবং যেখানে দুটি সমন্বয় ব্যবস্থা জড়িত সেখানে সর্বদা এক ধরণের স্থানাঙ্ককে অন্যটিতে রূপান্তর করার উপায় রয়েছে। ওপেনগিএলে এটি 4x4 ভিউ ম্যাট্রিক্স ব্যবহার করে করা হয়।

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


" যেমন OpenGL ডক্সের লেখকদের থেকে শুরু ঠিক," কারণ আমি নিশ্চিত যেমন OpenGL এর নির্মাতা স্পষ্টত খুব মধ্যে পার্থক্য বুঝতে পারা নির্বোধ নই উপস্থাপনা একটি বিশ্বের (যা সব যেমন OpenGL বজায় রাখে) এবং ধারণাগত উপস্থাপনা যে বিশ্বের ( যা ওপেনজিএল এর সাথে সম্পর্কিত কিছু নয়)।
নিকল বলাস

" কিন্তু এটা সম্পর্কে চিন্তা মাত্র একটি অত্যন্ত অকেজো এবং বিভ্রান্তিকর উপায়। " এটা এছাড়াও সত্য । এবং সত্য সবসময় একটি মিথ্যা চেয়ে বেশি সহায়ক। যত তাড়াতাড়ি বা পরের দিকে, এই মিথ্যাটি আপনাকে ধরে ফেলবে এবং আপনাকে সত্যের মুখোমুখি হতে হবে।
নিকল বোলাস 25:13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.