درباره تبدیل مختصات مدل های سه بعدی
ماده
اول از همه
ممکن است اغلب تصاویر سه بعدی را روی صفحه تلویزیون ببینید و در بازی ها نمایشگرها را ببینید، اما چگونه می توانید اشیایی را که در فضای سه بعدی وجود دارند، مانند شخصیت ها و ساختمان هایی که روی صفحه نمایش حرکت می کنند، روی یک صفحه نمایش دو بعدی نمایش دهید؟
در بازی های دو بعدی، فقط عناصر دو بعدی "X و Y" به عنوان مقادیر مختصات وجود دارد و نمایشگر نیز دو بعدی است، بنابراین اگر با مشخص کردن موقعیت مختصات X و Y یک شی را ترسیم کنید، به طور شهودی متوجه خواهید شد که چگونه در کدام موقعیت ترسیم می شود.
با این حال، در سه بعدی، چندان آسان نیست. همانطور که از نام آن پیداست، سه بعدی "3 بعدی" است و دارای سه اطلاعات مختصات است: "X، Y و Z". از آنجایی که مختصات با نمایشگر دو بعدی متفاوت است، نمی توان جسم را همانطور که هست ترسیم کرد.
سپس، کاری که باید انجام شود این است که "اطلاعات سه بعدی را به اطلاعات دو بعدی تبدیل کنید". این معمولا به عنوان "تبدیل مختصات" شناخته می شود. به خاطر داشته باشید که این تبدیل مختصات برای برنامه نویسی سه بعدی ضروری است.
انواع مختلفی از تبدیل مختصات برای تبدیل سه بعدی به دو بعدی وجود دارد، اما سه نوع اصلی از تبدیل مختصات وجود دارد که برنامه نویسان انجام می دهند: "تحول جهان"، "تبدیل مشاهده" و "تبدیل پروجکشن". در اینجا، ما همه چیز مربوط به تبدیل مختصات را توضیح خواهیم داد.
سیستم های مختصات چپ دست و راست دست
در سه بعدی، دو سیستم مختصات وجود دارد، "سیستم مختصات چپ دست" و "سیستم مختصات سمت راست" که جهت گیری های متفاوتی برای هر مختصات دارند همانطور که در شکل زیر نشان داده شده است.
Direct3D در درجه اول از یک سیستم مختصات چپ دست استفاده می کرد، اما توابعی برای محاسبه سیستم های مختصات راست دست نیز وجود دارد. با این حال، XNA فقط روش های محاسبه را برای سیستم های مختصات راست دست ارائه می دهد. به نظر می رسد این با این واقعیت مطابقت دارد که سایر برنامه ها اغلب از سیستم های مختصات راست دست استفاده می کنند.
تمام نکات XNA در این سایت از سیستم مختصات راست دست استفاده می کنند.
سیستم مختصات محلی (سیستم مختصات مدل)
هر مدل دارای یک سیستم مختصات با محوریت مبدا است. هنگام ایجاد یک مدل با نرم افزار مدل سازی، فکر می کنم اگر تصور کنید آن را با مبدا به عنوان مرکز ایجاد کنید، درک آن آسان تر است.
سیستم مختصات جهانی
سیستم مختصات جهان به شما امکان می دهد مدل را در هر جایی قرار دهید. اگر در این دگرگونی جهان کاری انجام ندهید، مدل مانند مختصات محلی در مبدا قرار می گیرد. قرار دادن نه تنها حرکت از مبدا، بلکه چرخش و مقیاس است.
مشاهده سیستم مختصات
هنگامی که مدل را در مختصات جهان قرار دادید، به اطلاعاتی در مورد جایی که به دنبال آن هستید و جایی که به فضای سه بعدی نگاه می کنید نیاز دارید. این همان چیزی است که ما آن را "دگرگونی های دید" می نامیم. تبدیل های نما معمولا اغلب به صورت دوربین نشان داده می شوند.
پارامترهای مورد نیاز برای این تبدیل عبارتند از "موقعیت دوربین"، "نقطه مورد نظر دوربین" و "جهت دوربین به سمت بالا". جهت دوربین توسط این سه پارامتر تعیین می شود. شکل زیر دوربین را از دیدگاه شخص ثالث نشان می دهد.
شکل زیر در واقع از دیدگاه دوربین با چیدمان نشان داده شده در شکل بالا دیده می شود (در این مرحله، ما هنوز مختصات را به صفحه تبدیل نکرده ایم، بنابراین فقط یک تصویر است).
در توضیحات قبلی به نظر می رسد که دوربین قرار گرفته و مختصات دگرگون می شوند، اما در محاسبه واقعی، مختصات جهان با توجه به موقعیت و جهت دوربین تبدیل می شوند. بنابراین، مبدا موقعیت دوربین است همانطور که در شکل زیر نشان داده شده است.
سیستم مختصات تصویری
هنگامی که تصمیم گرفتید از کدام موقعیت فضای سه بعدی را مشاهده کنید، گام بعدی پردازش نمایش "اشیاء کوچک که دور هستند" و "چیزهای بزرگی که در نزدیکی هستند" است. به این تبدیل تصویری می گویند. دو روش تبدیل فرافکنی وجود دارد، "طرح پرسپکتیو" و "طرح املایی"، اما تصویر رایج "طرح پرسپکتیو" به شرح زیر است.
طرح پرسپکتیو از پارامترهای زیر استفاده می کند: زاویه دید، نسبت ابعاد، موقعیت گیره رو به جلو و موقعیت گیره عقب. ناحیه ای که در شکل بالا با برچسب "frustum" نوشته شده است در نهایت روی صفحه ظاهر می شود.
"زاویه دید" محدوده دید قابل مشاهده از دوربین را مشخص می کند. کاهش زاویه بزرگنمایی می کند، افزایش آن بزرگنمایی می شود. زاویه دید مقدار عمودی frustum خواهد بود.
نسبت تصویر برای تعیین زاویه دید افقی استفاده می شود، در حالی که زاویه دید یک زاویه عمودی است. زاویه افقی معمولا با "زاویه دید × نسبت ابعاد" تعیین می شود و نسبت تصویر اساسا مقدار "عرض ÷ ارتفاع" صفحه ای است که می خواهید نمایش دهید. اگر این مقدار را تغییر دهید، شیء سه بعدی نمایش داده شده به صورت افقی یا عمودی کشیده می شود.
موقعیت گیره جلو و موقعیت گیره عقب برای تعیین اینکه آیا شی در محدوده جلو یا عقب نمایش داده می شود مشخص شده است. با توجه به ماهیت کامپیوتر، امکان نمایش تا بی نهایت وجود ندارد، بنابراین محدودیتی را تعیین می کنیم. این مقدار همچنین بر دقت بافر Z تأثیر می گذارد، بنابراین توصیه نمی شود آن را در ناحیه ترسیم فراتر از محدوده ای که نیازی به نمایش ندارد، قرار دهید.
شیء تبدیل شده با پرسپکتیو به فضایی مانند زیر تبدیل می شود. اشیایی که نزدیک به دوربین بودند بزرگنمایی می شوند و اشیایی که دور بودند کوچک می شوند.
این در نمودار قابل درک زیر نشان داده شده است.
اگر واقعا از دیدگاه دوربین به آن نگاه کنید، مانند زیر به نظر می رسد.
روش دیگر تبدیل تصویری ، طرح ریزی املایی است که یک منطقه قابل مشاهده مانند منطقه زیر را پیش بینی می کند. از آنجایی که عرض و ارتفاع بدون توجه به عمق ثابت است، اندازه جسم با عمق تغییر نمی کند.
سیستم مختصات صفحه نمایش
پس از تبدیل پروجکشن، به مختصات صفحه نمایش واقعی تبدیل می شود. حتی اگر صفحه نمایش باشد، موقعیت و برد نمایشگر بسته به تنظیمات پنجره نمایش تنظیم شده در دستگاه تغییر می کند. با این حال، در مورد بازی ها، مختصات کلاینت پنجره اغلب درگاه نمایش هستند، بنابراین فکر نمی کنم لازم باشد زیاد نگران باشید.
مختصات صفحه نمایش (0، 0) از مختصات طرح ریزی (-1، 1، z) تبدیل می شود. به طور مشابه، مختصات صفحه نمایش (عرض، ارتفاع) از مختصات طرح ریزی (1، -1، z) تبدیل می شوند.