Z দিয়ে ভাগ করার জন্য আমাদের কেন চতুর্থ স্থানাঙ্কের প্রয়োজন?


12

আমি এখানে প্রতিক্রিয়া পড়ি:

চূড়ান্ত অবস্থান হিসাবে ভেক্টরের চতুর্থ উপাদানটির সাথে গ্রাফিক্স কার্ড কী করবে?

"চতুর্থ উপাদানটি দৃষ্টিভঙ্গি অভিক্ষেত্রের উপর নজর রাখার কৌশল you আপনি যখন একটি দৃষ্টিকোণ প্রক্ষেপণ করেন, আপনি z: x '= x / z, y' = y / z দিয়ে ভাগ করতে চান, তবে এটি কোনও অপারেশন নয় এক্স, ওয়াই, জেড এর ভেক্টরের সাথে অপারেটিং করে একটি 3x3 ম্যাট্রিক্স প্রয়োগ করতে পারে this এটি করার জন্য যে কৌশলটি স্ট্যান্ডার্ড হয়ে উঠেছে তা হল চতুর্থ স্থানাঙ্ক যুক্ত করা, ডাব্লু, এবং ঘোষণা করুন যে x, y, z সর্বদা ডাব্লু দ্বারা বিভক্ত হবে সমস্ত রূপান্তর প্রয়োগ হওয়ার পরে এবং রাস্টেরাইজেশনের আগে "।

তবে আমি বুঝতে পারি না কেন আমরা 3x3 ম্যাট্রিক্স ব্যবহার করে z দিয়ে ভাগ করতে পারি না?

আমরা কেবল গুণতে পারি না

1/z 0 0
0 1/z 0
0 0 1/z

পেতে [x/z y/z 1]

?


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

আমি অনুবাদ অংশটি বুঝতে পারি তবে আমি বুঝতে পারি না যে চতুর্থ স্থানাঙ্ক যোগ করা জেড দ্বারা বিভাজনে কীভাবে সহায়তা করবে বা

এটির জন্য মূল্যবান আপনি যা বলেছিলেন তা সম্পূর্ণভাবে করতে পারেন। X এবং y কে z দিয়ে বিভাজক করা 3 ডি স্থানাঙ্ক থেকে 2 ডি স্ক্রিন স্পেসে প্রক্ষেপণের সাথে রূপান্তর করার জন্য একটি বৈধ পদ্ধতি যেখানে দূরবর্তী বস্তুগুলি আরও ছোট হয়। ডাব্লু হ'ল অনুবাদ করতে সক্ষম হবার জন্য এটি চতুর্থ মাত্রায় নিয়ে যাওয়ার জন্য একজাতীয় সমন্বয়।
অ্যালান ওল্ফ

উত্তর:


14

কারণ আপনি শুধুমাত্র বিভক্ত [x, y, z]দ্বারা zআপনি পেতে [x/z, y/z, 1]এবং আপনার প্রকৃত মূল্য হারিয়ে z, যা আসলে দরকারী হলে আপনার কাছাকাছি / পর্যন্ত সমতল ক্লিপিং না বা জেড-বাফার ভরাট করতে চান।

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

উদাহরণস্বরূপ, একটি দৃষ্টিকোণ অভিক্ষেপের ক্ষেত্রে, এটি ফলাফল 4-উপাদান ভেক্টর:

| a 0 0 0 |   | x |   |   ax   |
| 0 b 0 0 |   | y |   |   by   |
| 0 0 c d | × | z | = | cz + d |
| 0 0 1 0 |   | 1 |   |    z   |

দৃষ্টিভঙ্গি ভাগ করার পরে ভেক্টর হয়ে যায়:

|  ax/z   |
|  by/z   |
| c + d/z |
|    1    |

এবং c + d/zঅংশটি জেড বাফারটি পূরণ করার জন্য পর্যাপ্ত তথ্য সহ আমাদের ছেড়ে দেয়।


[X / z, y / z, z] প্রদান করে আপনি কেবল X এবং Y কে Z দ্বারা ভাগ করতে পারেন। জিপিইউ নেই আছে ভেক্টর বিভাজন করতে হবে, এটা কোনো হিসাব না করার জন্য ডিজাইন করা হয়ে থাকতে পারে।
ব্যবহারকারী 253751

3

প্রযুক্তিগতভাবে, আপনি এটি করতে পারে । তবে কেন বিরক্ত করবেন? আপনার চূড়ান্ত হওয়ার সময় z, আপনি হয়:

  • আপনার বর্ণনার মতো একটি 3x3 ম্যাট্রিক্স 9 * sizeof(float)তৈরি করুন, স্থানের বাইটগুলি নষ্ট করে, গণনা 1/z(একটি বিভাগ) করার জন্য চক্র ব্যয় করুন এবং তারপরে আপনার শেষ চূড়ান্তটি পেতে নয়টি গুণ এবং ছয়টি যোগ করুন, বা
  • আধুনিক পাইপলাইন বর্তমানে যেমন করে আপনি তিনটি বিভাগ করতে পারেন do

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

এছাড়াও, 3x3 ম্যাট্রিক্স কোনও অনুবাদ এনকোড করতে পারে না এবং তাই wপাইপলাইনে আগে 4x4 ম্যাট্রিক্স (এবং এভাবে চতুর্থ স্থানাঙ্ক) ব্যবহৃত হয় । এর অর্থ আপনার ইতিমধ্যে সেখানে চতুর্থ উপাদান বসে আছে যাতে আপনি এটি একটি দরকারী মান পরিবহনের জন্য এবং এটির সাথে আপনার বিভাগটি করতে পারেন।

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