HW 03.pdf

‫تمرین گرافیک کامپیوتری ‪ -‬شماره ‪ - 3‬اسپالین ها‬
‫در این تمرین پیاده سازی تعدادی از انواع اسپالین ها مورد نظر است که در ادامه توضیح داده می شوند‪ .‬کاربر‬
‫باید بتواند اسپالین مورد نظر خود را انتخاب کرده و برنامه ی شما باید نقاط کنترلی و هر ورودی دیگری که‬
‫برای این اسپالین الزم است را دریافت کند و آن را در یک صفحه ی دو بعدی رسم نماید‪.‬‬
‫وارد کردن نقاط کنترلی از طریق کلیک کردن روی صفحه مانیتور می باشد‪ .‬توجه کنید که ترتیب نقاط کنترلی‬
‫همان ترتیب وارد کردن آنها است‪ .‬خواندن این داده ها از کد یا فایل قابل قبول نیست‪ .‬تعداد نقاط کنترلی‬
‫محدودیت ندارد و اسپالین شما باید با ورود هر یک‪ re-draw ،‬شود‪.‬‬
‫تاکید زیادی بر رابط کاربری است‪ .‬سعی کنید آن را تا حد ممکن جذاب و قابل استفاده طراحی کنید و در‬
‫نمایش اسپالین ها از رنگهای مناسب استفاده نمایید‪.‬‬
‫برای این پیاده سازی میتوانید از کتابخانه های ‪ OpenGL‬استفاده کنید‪.‬‬
‫اسپالین ها‬
‫‪ .1‬اسپالین های بزییر‬
‫‪‬‬
‫)‪(Bezier Splines‬‬
‫در این قسمت پیاده سازی اسپالین های درجه ‪ 3‬الزامیست و به درجات باالتر نمره اضافه‬
‫تعلق می گیرد‬
‫‪ .2‬بی‪-‬اسپالین ها (‪)B-Splines‬‬
‫‪‬‬
‫همانطور که می دانید در این قسمت عالوه نقاط کنترلی‪ ،‬بردار گره ها (‪ )Knot Vector‬نیز برای‬
‫رسم اسپالین مورد نیاز است که باید از کاربر گرفته شود‪.‬‬
‫‪‬‬
‫بی‪ -‬اسپالین ها بسته به مولفه های بردار گره چندین نوع هستند و درجه یک بی‪-‬اسپالین هم‬
‫از تعداد مؤلفه های بردار گره مشخص می شود‪.‬‬
‫برای سادگی کار‪ ،‬شما فقط الزم است بی‪-‬اسپالین های یکنواخت و غیر یکنواخ تدرجه‬
‫‪(UniformCubic B-Splines)3‬‬
‫را پیاده سازی کنید و درجات باالتر نمره اضافه خواهند‬
‫داشت‪ .‬همانطور که می دانید برای یک بی‪ -‬اسپالین درجه ‪ 3‬بردار گره ها باید ‪ 4‬مؤلفه داشته‬
‫باشد‪.‬‬
‫‪ .3‬سطوح بزییر (‪)Bezier Surfaces‬‬
‫‪‬‬
‫سطوح بزییر همانند اسپالین ها باید با دریافت نقاط کنترلی تولید شوند‪ .‬برای پیاده سازی این‬
‫سطوح می توانید از کتابخانه های آماده استفاده کنید‪ .‬برای نمایش این سطوح برنامه شما باید‬
‫چهار دید متفاوت را به کاربر ارائه دهد که عبارتند از جلو‪ ،‬چپ‪ ،‬پایین‪ ،‬باال‪.‬‬
‫‪‬‬
‫محور‬
‫‪z‬‬
‫از فضای سه بعدی‪ ،‬بر صفحه نمایش شما عمود و جهت مثبت آن به بیرون صفحه‬
‫است‪ .‬با این توصیف‪ ،‬چهار دید خواسته شده را به صورت زیر در نظر بگیرید‪.‬‬
‫‪‬‬
‫جلو‪ :‬دیدن از طرف ‪ y‬های منفی به سمت ‪ y‬های مثبت‬
‫و‪x = z = 0‬‬
‫‪‬‬
‫چپ‪ :‬دیدن از طرف ‪ x‬های منفی به سمت ‪ x‬های مثبت‬
‫و‪y=z=0‬‬
‫‪‬‬
‫باال‪ :‬دیدن از طرف ‪ z‬های مثبت به سمت ‪ z‬های منفی‬
‫و‪x=y=0‬‬
‫‪‬‬
‫پایین‪ :‬دیدن از طرف ‪ z‬های منفی به سمت ‪ z‬های مثبت‬
‫و‪x=y=0‬‬
‫پروچکشن موازی مد نظر است و نیازی به پروجکشن پرسپکتیو نیست‪.‬‬
‫سطوح شما کافسیت به صورت‬
‫‪wireframe‬‬
‫باشند ولی رنگ آمیزی کامل سطح نمره اضافه‬
‫خواهد داشت‪ .‬چون سطح شما سه بعدی است قسمتهایی از آن می توانند مقابل قسمتهای‬
‫دیگر قرار بگیرند‪ ،‬از این رو بهتر است هنگام نمایش سطح روی مانیتور از قسمتهایی شروع‬
‫کنید که دورتر از نقطه دید شما هستند‪ .‬بدیهی است که برای هر زاویه دید ترتیب نقاط‬
‫متفاوت می شود‪.‬‬
‫برای القای سه بعدی بودن (عمق داشتن) سطح می توانید نقاط نزدیکتر به نقطه دید را روشن‬
‫تر و نقاط دورتر را تاریک تر رنگ آمیزی کنید)‪:(Depth Cueing approach‬‬
‫‪‬‬
‫اگر نمایش به صورت‬
‫‪wireframe‬‬
‫است خطوط اتصال نقاط می توانند رنگ یکی دو‬
‫نقطه ای که به آن متصل هستند را داشته باشند‪.‬‬
‫‪‬‬
‫اگر صفحه را کامال رنگ آمیزی می کنید صفحات بوجود آمده بین هر چهار نقطه می‬
‫توانند رنگ یکی از این چهار نقطه را داشته باشند‪.‬‬
‫القای عمق اجباری است اما روش آن الزم نیست آنچه در باال گفته شد باشد‪.‬‬
‫تحویل تمرین‬
‫تحویل فقط به صورت حضوری است‪ .‬ضمن اینکه حتما هر دو عضو گروه باید در پیاده سازی این تمرین نقش‬
‫مؤثر داشته باشند‪ .‬طبیعتا حضور هر دو عضو هنگام تحویل الزامی می باشد‪.‬‬