مشاهده پروژه ثبت پیشنهاد روی پروژه
توضیحات پروژه ی Ray Trace:
بخش 1:
در فایل **Vector3.cpp** تابعی با نام `vec3 vec3::reflection(const vec3 &normal) const` وجود دارد که برای محاسبهی نحوهی بازتاب یک بردار از سطح با نرمال مشخص (normal) استفاده میشود. اصول این محاسبه بسیار ساده است: اگر یک توپ تنیس را به دیوار پرتاب کنید، جهت پرواز توپ پس از برخورد به این بستگی دارد که دیوار چطور کج شده باشد. این دقیقاً همان اصلی است که در تنیس به کار میرود.
در بخش توضیحات (کامنتها) اشارهای شده که چگونه بازتاب را به صورت ریاضی محاسبه کنید. پس از انجام این کار، میتوانید به جای مقدار بازگشتی قبلی، عبارت زیر را برگردانید:
با انجام این کار، باید تصویری مشابه تصویر ارائهشده در فایل ها به اسم "عکسی که با ران کردن کد بدون تغییر می بینید.
همچنین میتوانید مقادیر مربوط به گویها را در فایل **main.cpp** تغییر دهید تا ببینید چگونه این تغییرات بر جلوهها تأثیر میگذارند.
این همان چیزی است که باید ببینید اگر بازتاب را به درستی پیادهسازی کرده باشید. بهویژه به گویهای رنگی منعکسشده در توپ آینهای در سمت راست تصویر دقت کنید. عکس در فایل ها موجود است.
بخش 2:
خوشبختانه، توسعهدهنده قبلاً تابعی با نام `std::optional<vec3> vec3::refraction(const vec3 &normal, double IORRatio) const` را پیادهسازی کرده است. این تابع کمی پیچیدهتر از بازتاب است، زیرا ممکن است پرتو به دلیل **بازتاب داخلی کامل** (Total Internal Refraction) درون ماده ناپدید شود. با این حال، ردیابی پرتوهای شکست هنوز پیادهسازی نشده است.
با استفاده از دستور زیر:
```cpp
std::optional<vec3> refractionDir = ray._direction.refraction(normal, intersection->_material.getIndexOfRefraction());
```
میتوانید جهتی را که پرتو شکست به آن اشاره میکند، به دست آورید.
خوشبختانه، میتوانید از کدی مانند زیر بهعنوان راهنما استفاده کنید:
```cpp
Ray reflectionRay(intersectionPoint + normal * epsilon, ray._direction.reflection(normal));
```
تا بفهمید یک **پرتو شکست** (refractionRay) چگونه باید به نظر برسد.
کد خود را کامل کنید و مقدار بازگشتی قبلی را با این دستور جایگزین کنید:
```cpp
//return local_color * l + refraction * t;
```
اگر شکست به درستی پیادهسازی شده باشد، نتیجهای مشابه تصویر ارائهشده مشاهده خواهید کرد که در فایل ها به همین اسم موجود است.
این همان چیزی است که باید ببینید اگر **پرتو شکست** (refractionRay) به درستی پیادهسازی شده باشد. گویهای موجود در توپ شیشهای سمت چپ در قسمت پایین قرار گرفتهاند که این نتیجهی پدیدههای جالب فیزیک نور است.
بخش 3:
اگر مسئلهی **بازتاب** (reflection) و **شکست** (refraction) را حل کردهاید، میتوانید مقدار بازگشتی قبلی را با این دستور جایگزین کنید:
```cpp
//return local_color * l + reflection * r + refraction * t;
```
سپس بررسی کنید که آیا تصویر خروجی شما دقیقاً مشابه تصویر ارائهشده است یا خیر.
عکس نهایی که باید به دست بیاورید در فایل ها موجود است.
توضیحات نهایی:
برای این پروژه 4 روز وقت است و یک ویدیوی کوتاه توضیحات برای این پروژه نیاز است که به چه شکل و چرا این کدها نوشته شده اند و چگونه کار می کنند. دو فایل فقط در پروژه باید رویشان کار شود که بالا توضیح داده شده است. استفاده از هوش مصنوعی مجاز نمی باشد به دلیل چک شدن پروژه با هوش
با تشکر
مشاهده جزئیات پیشنهادهای این پروژه
گزارش تخلف
پروژه را با دوستان خود به اشتراک بگذارید