نمونه‌برداری، بازسازی، کوانتیزه‌سازی و تمرین‌های فصل هفتم | گرافیک تعاملی با OpenGL

نمونه‌برداری، بازسازی، کوانتیزه‌سازی و تمرین‌های فصل هفتم

نمونه‌برداری، بازسازی، کوانتیزه‌سازی و تمرین‌های فصل هفتم

  • عنوان اصلی اثر: Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL, Sixth Edition
  • عنوان ترجمه‌شدهٔ این بخش: نمونه‌برداری، بازسازی، کوانتیزه‌سازی و تمرین‌های فصل هفتم
  • نویسندگان و سازمان: Edward Angel — University of New Mexico؛ Dave Shreiner — ARM, Inc.
  • زبان اصلی: انگلیسی
  • وضعیت مجوز: حق ترجمه و بازنشر توسط کاربر تأیید شده است.
  • تاریخ ترجمه: ۱۴۰۵/۰۵/۲۲
  • مترجم: ترجمه با کمک هوش مصنوعی

نمونه‌برداری، بازسازی، کوانتیزه‌سازی و تمرین‌های فصل هفتم

برای شبیه‌سازی Depth of Field، اگر Viewer را در جهت x به اندازهٔ (\Delta x) جابه‌جا کنیم، باید مرز چپ Frustum نیز طوری اصلاح شود که صفحهٔ Focus ثابت بماند:

x'_{min}=x_{min}+\frac{\Delta x}{z_f}(z_f-z_{near}).

روابط مشابهی برای xmax، ymin و ymax وجود دارد. با افزایش Jitter در x و y، Depth of Field باریک‌تر می‌شود.

۷٫۱۲ Sampling و Aliasing

در کاربردهای مختلف دیدیم که تبدیل نمایش پیوستهٔ یک کمیت به تقریب گسسته می‌تواند خطاهای قابل مشاهده‌ای ایجاد کند. این خطاها را Aliasing نامیدیم. هنگام کار با Bufferها همیشه با Digital Image سروکار داریم و اگر Sampling درست انجام نشود، خطاها می‌توانند شدید باشند. در این بخش ماهیت Digital Image و منشأ Aliasing و روش‌های کاهش آن را بررسی می‌کنیم.

با یک تصویر پیوستهٔ دوبعدی (f(x,y)) آغاز می‌کنیم. مقدار f می‌تواند Gray Level در تصویر تک‌رنگ یا مقدار یکی از Primary Colorها در تصویر رنگی باشد. در رایانه، Digital Image آرایه‌ای از (nm) Pixel در n سطر و m ستون است و هر Pixel دارای k Bit است.

تبدیل تصویر پیوسته به گسسته دو مرحله دارد. نخست باید تصویر پیوسته را در (nm) نقطه روی یک Grid Sample کنیم تا مجموعهٔ ({f_{ij}}) به دست آید. هر Sample اندازه‌گیری f روی ناحیه‌ای کوچک از تصویر پیوسته است. سپس هر Sample با فرایندی به نام Quantization به یک Pixel k بیتی تبدیل می‌شود.

۷٫۱۲٫۱ نظریهٔ Sampling

فرض کنید Grid مستطیلیِ نمونه‌برداری مانند شکل ۷٫۴۱ داریم و فاصلهٔ نقاط در دو جهت به‌ترتیب (h_x) و (h_y) است. Sampler ایده‌آل مقدار

f_{ij}=f(x_0+ih_x,y_0+jh_y)

را تولید می‌کند.

شکل ۷٫۴۱ — Grid نمونه‌برداری.

دو پرسش اساسی مطرح است. نخست، این Sampling ایده‌آل چه مقدار اطلاعات از تصویر اصلی را از دست می‌دهد؟ دوم، آیا می‌توان از Digital Image دوباره به یک تصویر پیوسته بازگشت بدون آنکه خطای جدیدی ایجاد شود؟ مرحلهٔ دوم Reconstruction نام دارد و برای نمایش محتوای Frame Buffer روی Monitor ضروری است.

تحلیل ریاضی این مسائل از Fourier Analysis استفاده می‌کند؛ شاخه‌ای از ریاضیات کاربردی که برای Digital Signal Processing بسیار مناسب است. ایدهٔ اصلی Fourier Theory این است که یک تابع فضایی یا زمانی را می‌توان به مجموعه‌ای از Sinusoidها با فرکانس‌های مختلف—و احتمالاً بی‌نهایت تعداد—تجزیه کرد. این مفهوم در صدا آشناست، جایی که یک صوت را بر حسب Frequency Componentها یا Spectrum آن توصیف می‌کنیم.

برای یک Image دوبعدی نیز می‌توان آن را جمع الگوهای Sinusoidal با دو Spatial Frequency دانست. شکل ۷٫۴۲(a) یک تابع یک‌بعدی و شکل ۷٫۴۲(b) دو Sinusoid سازندهٔ آن را نشان می‌دهد. شکل ۷٫۴۳ نیز توابع تناوبی دوبعدی را نشان می‌دهد.

شکل ۷٫۴۲ — تجزیهٔ یک‌بعدی. (a) تابع. (b) مؤلفه‌ها.

شکل ۷٫۴۳ — توابع تناوبی دوبعدی.

در نتیجه هر تابع فضایی دوبعدی (f(x,y)) دو نمایش معادل دارد: نمایش فضایی خود (f(x,y)) و نمایش Frequency Domain آن (g(\xi,\eta)). مقدار g سهم فرکانس فضایی دوبعدی ((\xi,\eta)) در تشکیل f را بیان می‌کند. بسیاری از پدیده‌ها از جمله Sampling در Frequency Domain بسیار ساده‌تر توضیح داده می‌شوند.

برای درک پیامدهای Sampling بدون ورود به جزئیات سنگین Fourier Analysis، قضیهٔ بنیادی Nyquist Sampling Theorem را می‌پذیریم. این قضیه دو بخش دارد: بخش نخست دربارهٔ خطای Sampling است و بخش دوم Reconstruction را کنترل می‌کند.

قضیهٔ Nyquist، بخش اول: Sampleهای ایده‌آل یک تابع پیوسته تمام اطلاعات تابع اصلی را حفظ می‌کنند اگر و تنها اگر Sampling Frequency بیشتر از دو برابر بالاترین Frequency موجود در تابع باشد.

بنابراین برای جلوگیری از از‌دست‌رفتن اطلاعات، Spectrum تابع باید خارج از Windowی با پهنای کمتر از Sampling Frequency و مرکز مبدأ صفر باشد. نصف Sampling Frequency را Nyquist Frequency می‌نامند؛ فرکانس‌هایی بالاتر از آن در داده نباید وجود داشته باشند اگر بخواهیم Aliasing رخ ندهد. تابعی که Spectrum آن خارج از یک Window محدود صفر باشد Band-Limited نامیده می‌شود.

برای Image دوبعدی، Sampling Frequencyها از فاصلهٔ Grid تعیین می‌شوند و در جهت x و y به‌ترتیب (1/h_x) و (1/h_y) هستند. قضیه Sampling ایده‌آل را فرض می‌کند: تعداد بی‌نهایت Sample که هر کدام مقدار دقیق تابع در نقطهٔ Grid را می‌گیرند. در عمل فقط تعداد محدودی Sample برابر Resolution Buffer داریم؛ بنابراین نمی‌توان تابعی واقعاً Band-Limited ساخت. حتی بدون Fourier Theory نیز روشن است که مجموعهٔ محدود Sampleها ذاتاً ابهام دارد، چون رفتار تابع بیرون ناحیهٔ نمونه‌برداری‌شده معلوم نیست.

نقض معیار Nyquist باعث Aliasing می‌شود. هم تابع اصلی و هم Sampleهای آن نمایش Frequency-Domain دارند. Spectrum تابع Sampleشده از Replicaهای Spectrum تابع اصلی تشکیل می‌شود که مرکز آن‌ها به اندازهٔ Sampling Frequency از هم فاصله دارند.

در شکل ۷٫۴۴(a) تابع یک‌بعدی و Sampleها، در شکل ۷٫۴۴(b) Spectrum تابع و در شکل ۷٫۴۴(c) Replicaهای Spectrum پس از Sampling دیده می‌شوند. چون Sampling Rate از Nyquist بیشتر است، Replicaها از هم جدا هستند.

اگر معیار Nyquist نقض شود، مانند شکل ۷٫۴۵، Replicaها روی هم می‌افتند. شکل ۷٫۴۶ بخش مرکزی را نشان می‌دهد. اگر فرکانس (\xi_0) بالاتر از (\xi_s/2) باشد، Sampling یک Replica از آن را در فرکانس (\xi_s-\xi_0) ایجاد می‌کند که زیر Nyquist Frequency قرار دارد. این فرکانس مصنوعی در صوت شنیده یا در Image دیده می‌شود. پس (\xi_0) یک Alias در (\xi_s-\xi_0) دارد.

شکل ۷٫۴۴ — تابع Band-Limited. (a) تابع و Sampleها در Spatial Domain. (b) Spectrum تابع. (c) Spectrum Sampleها.

شکل ۷٫۴۵ — Replicaهای هم‌پوشان.

شکل ۷٫۴۶ — Aliasing.

پس از وقوع Aliasing دیگر نمی‌توان تشخیص داد انرژی موجود در یک Frequency واقعاً در دادهٔ اصلی وجود داشته یا توسط Sampling به آن Frequency منتقل شده است.

ابهام Aliasing را حتی بدون Fourier Analysis نیز می‌توان با یک Sinusoid نشان داد. اگر Sinusoidی را دقیقاً با دو برابر Frequency آن Sample کنیم، از دو Sample می‌توان آن را بازیابی کرد؛ اما همان دو Sample می‌توانند متعلق به Sinusoidهایی با Frequencyهای چندبرابر نیز باشند. همهٔ این Frequencyها Alias یکدیگرند. تنها اگر از قبل بدانیم داده Band-Limited بوده، Sampleها یک تعبیر یکتا خواهند داشت.

در تصاویر دنیای واقعی بیشتر انرژی Spectrum در Frequencyهای پایین متمرکز است. بنابراین با اینکه Image با اندازهٔ محدود نمی‌تواند کاملاً Band-Limited باشد، Aliasing اغلب محدود است چون محتوای کمی بالاتر از Nyquist Frequency وجود دارد. استثنا، الگوهای منظم و تناوبی‌اند. چنین ساختارهایی انرژی را در چند Frequency مشخص متمرکز می‌کنند و اگر یکی از آن‌ها بالاتر از Nyquist باشد، Beat یا Moiré Pattern به‌وضوح ظاهر می‌شود؛ مانند لباس راه‌راه در Video، الگوهای موجی در تصاویر Halftone یا عکس دیجیتال زمین‌های کشاورزی شخم‌خورده.

شکل ۷٫۴۷ — Aliasing یک Sinusoid.

اغلب می‌توان Aliasing را با Prefiltering پیش از Scanکردن Image یا با کنترل مساحتی که Scanner برای اندازه‌گیری Sample استفاده می‌کند کاهش داد. شکل ۷٫۴۸ دو روش را نشان می‌دهد.

شکل ۷٫۴۸ — Scanکردن Image. (a) Point Sampling. (b) Area Averaging.

Sampler ایده‌آل شکل ۷٫۴۸(a) مقدار دقیق تصویر در نقطه را می‌گیرد:

f_{ij}=f(x_i,y_i).

Scanner واقعی‌تر شکل ۷٫۴۸(b) مقدار را با میانگین وزن‌دار روی ناحیه‌ای کوچک محاسبه می‌کند:

f_{ij}=\int_{x_i-s/2}^{x_i+s/2}\int_{y_i-s/2}^{y_i+s/2}f(x,y)w(x,y)\,dy\,dx.

تابع (w(x,y)) وزن نقاط داخل Footprint نمونه‌برداری را تعیین می‌کند. این Area Averaging نوعی Low-Pass Filtering پیش از Sampling است و می‌تواند مؤلفه‌های Frequency بالا را که در غیر این صورت Alias می‌شوند کاهش دهد.

با انتخاب اندازهٔ Window یعنی s و Weighting Function یعنی w می‌توان مؤلفه‌های High-Frequency تصویر را تضعیف و Aliasing را کاهش داد. خوشبختانه Scannerهای واقعی ناچارند اندازه‌گیری را روی ناحیه‌ای محدود، موسوم به Sampling Aperture، انجام دهند؛ بنابراین حتی بدون آگاهی کاربر از Aliasing، مقداری Antialiasing به‌طور طبیعی رخ می‌دهد.

شکل ۷٫۴۹ — تابع Sinc.

۷٫۱۲٫۲ Reconstruction

فرض کنید مجموعه‌ای نامتناهی از Sampleها در اختیار داریم که با نرخی بالاتر از Nyquist Frequency گرفته شده‌اند. بازسازی تابع پیوسته از این Sampleها بر بخش دوم قضیهٔ Nyquist متکی است.

قضیهٔ Nyquist، بخش دوم: یک تابع پیوستهٔ (f(x)) را می‌توان از Sampleهای ({f_i}) چنین بازسازی کرد:

f(x)=\sum_{i=-\infty}^{\infty}f_i\operatorname{sinc}(x-x_i).

تابع Sinc برابر است با:

\operatorname{sinc}(x)=\frac{\sin \pi x}{\pi x}.

نسخهٔ دوبعدی برای (f(x,y)) و Sampleهای ایده‌آل ({f_{ij}}):

f(x,y)=\sum_{i=-\infty}^{\infty}\sum_{j=-\infty}^{\infty}f_{ij}\operatorname{sinc}(x-x_i)\operatorname{sinc}(y-y_j).

این روابط از این واقعیت می‌آیند که در Frequency Domain می‌توان با یک Low-Pass Filter که فقط در بازهٔ ((-\xi_s/2,\xi_s/2)) غیرصفر است، یک Replica صحیح را از مجموعهٔ Replicaهای ایجادشده توسط Sampling جدا کرد.

شکل ۷٫۵۰ — Reconstruction یک‌بعدی.

شکل ۷٫۵۱ — تابع Sinc دوبعدی.

در دو بعد Reconstruction به Sinc دوبعدی نیاز دارد. مشکل عملی این است که نمایشگر فیزیکی نمی‌تواند تابع Sinc ایده‌آل را تولید کند، چون Sinc دارای Side Lobeهای منفی است.

در CRT از یک Digital Image شامل Sampleها آغاز می‌کنیم. برای هر Sample یک Spot نور در نقطهٔ متناظر Grid روی سطح نمایشگر ایجاد می‌شود و مقدار Sample شدت Spot یا Beam را Modulate می‌کند. با Focusکردن Beam می‌توان شکل Spot را تا حدی کنترل کرد. فرمول Reconstruction می‌گوید شکل ایده‌آل Beam باید Sinc دوبعدی باشد، اما Beam فقط انرژی مثبت تولید می‌کند و Spot نمی‌تواند مقدار منفی داشته باشد؛ در نتیجه Display Process ناگزیر خطا دارد.

کیفیت Display را می‌توان بر اساس میزان نزدیکی Spot واقعی به Sinc ایده‌آل سنجید. شکل ۷٫۵۳ Sinc و چند تقریب یک‌بعدی را نشان می‌دهد. Spot با شکل Gaussian مشابه بسیاری از CRTهاست و Spot مستطیلی می‌تواند Pixel مربعی LCD را تقریب بزند.

شکل ۷٫۵۲ — نمایش یک نقطه روی CRT.

شکل ۷٫۵۳ — Spotهای نمایش. (a) Spot ایده‌آل. (b) تقریب مستطیلی. (c) تقریب Piecewise-Linear. (d) تقریب Gaussian.

هر تقریب Spot را می‌توان پهن‌تر یا باریک‌تر کرد. تحلیل Frequency Domain نشان می‌دهد Spotهای پهن‌تر در Frequencyهای پایین دقیق‌تر ولی در Frequencyهای بالا ضعیف‌ترند. اندازهٔ Spot در عمل یک مصالحه است و بخشی از تفاوت‌های بصری میان Monitorها به Profile متفاوت Spot مربوط می‌شود.

۷٫۱۲٫۳ Quantization

تحلیل Sampling بسیاری از اثرهای مهم را توضیح می‌دهد، اما هنوز اثر Quantizeشدن هر Sample به k سطح گسسته را وارد نکرده‌ایم. برای تابع Scalar g در بازهٔ

g_{min}\le g\le g_{max},

یک Quantizer تابعی q است که اگر

g_i\le g\le g_{i+1},

آنگاه

q(g)=q_i.

بنابراین هر مقدار پیوستهٔ g به یکی از k مقدار گسسته تخصیص داده می‌شود؛ شکل ۷٫۵۴ این رفتار را نشان می‌دهد.

شکل ۷٫۵۴ — Quantizer.

طراحی Quantizer شامل انتخاب Quantization Levelهای ({q_i}) و Thresholdهای ({g_i}) است. اگر Probability Distribution مقدار g یعنی (p(g)) معلوم باشد، می‌توان مقادیر را طوری انتخاب کرد که Mean Square Error

e=\int(g-q(g))^2p(g)\,dg

کمینه شود.

بااین‌حال Quantizerها اغلب بر پایهٔ ویژگی‌های ادراکی انسان طراحی می‌شوند. یک قاعدهٔ تجربی این است که تغییر یک Level نباید قابل تشخیص باشد، ولی تغییر دو Level باید دیده شود. با توجه به Threshold سیستم بینایی برای تشخیص تغییر Luminance، معمولاً دست‌کم ۷ یا ۸ Bit، یعنی ۱۲۸ تا ۲۵۶ Level، لازم است. پاسخ انسان به Intensity/Brightness تقریباً Logarithmic است؛ بنابراین Levelها معمولاً به‌شکل نمایی توزیع می‌شوند تا خطای ادراکی میان Levelهای متوالی تقریباً برابر باشد.

جمع‌بندی و یادداشت‌ها

در آغاز گرافیک رایانه‌ای، کار با اشیای هندسی دوبعدی و سه‌بعدی «Graphics» و کار صرف با Imageهای دوبعدی «Image Processing» تلقی می‌شد. پیشرفت سخت‌افزار این دو حوزه را عملاً به هم نزدیک کرده است. برای Image Synthesis این همگرایی روش‌های فراوانی ایجاد کرده که زمانی غیرقابل تصور بودند؛ برای نمونه اکنون نگاشت یک Image یا Texture دوبعدی روی سطح سه‌بعدی می‌تواند تقریباً با همان هزینهٔ Rendering سطح با Constant Shading انجام شود.

Texture Mapping اثر عمیقی بر Real-Time Graphics داشته است. در Animation، Virtual Reality و Scientific Visualization، Hardware Texture Mapping جزئیات بصری را بدون سنگین‌کردن Geometry Pipeline می‌افزاید. Compositing از طریق Alpha Channel نیز کارهایی مانند Antialiasing و افکت‌هایی مانند Fog و Depth of Field را در همان Graphics Pipeline ممکن می‌کند.

Mapping Methodها نمونهٔ خوبی از تعامل Hardware، Software و Application هستند. Texture Mapping نخست به‌عنوان Algorithm نرم‌افزاری مطرح شد؛ وقتی توانایی آن در ایجاد صحنه‌های پیچیده روشن شد، سازندگان سخت‌افزار Texture Memory بزرگی به سامانه‌ها افزودند. پیاده‌سازی سخت‌افزاری سپس Real-Time Texture Mapping را ممکن کرد و طراحی بسیاری از Applicationها، به‌ویژه Gameها، تغییر یافت.

GPUهای جدید امکانات بیشتری داده‌اند: Pipeline برنامه‌پذیر شده است؛ Fragment Processor قابل برنامه‌ریزی Techniqueهای تازهٔ Texture را با Interactive Speed ممکن می‌کند؛ Memory بزرگ GPU بسیاری از انتقال‌های پرهزینهٔ Image Data بین CPU و GPU را حذف می‌کند؛ معماری موازی GPU برای پردازش Discrete Data بسیار مناسب است؛ و Floating-Point Frame Buffer بسیاری از مسائل Precision در Image Manipulation را کاهش می‌دهد.

این فصل عمدتاً بر Techniqueهایی تمرکز داشت که Hardware و APIهای جدید مستقیماً از آن‌ها پشتیبانی می‌کنند. بسیاری از روش‌های معرفی‌شده نسبتاً جدیدند و روش‌های بیشتری نیز در پژوهش‌های جدید، به‌ویژه برای Programmable Processorها، عرضه شده‌اند.

منابع پیشنهادی

Environment Mapping توسط Blinn و Newell مطرح شد [Bli76]. Texture Mapping نخست توسط Catmull استفاده شد و مرور Heckbert [Hec86] از منابع کلاسیک آن است. Hardware Support برای Texture Mapping با SGI Reality Engine گسترش یافت [Ake93]. Perlin و Hoffert [Per89] Noise Functionهایی برای تولید Texture دوبعدی و سه‌بعدی طراحی کردند و Ebert و همکاران [Ebe02] روش‌های متعدد Texture Synthesis را بررسی کرده‌اند.

Aliasing از آغاز Raster Graphics مسئله‌ای مهم بوده است [Cro81]. نخست نگرانی اصلی Rasterization خط‌ها بود، سپس Aliasing در Animation [Mag85] و Ray Tracing [Gla89] نیز بررسی شد. منابع Image Processing مانند [Pra78, Gon08, Cas96] مقدمه‌ای بر Signal Processing و Aliasing دوبعدی‌اند. آثار Glassner [Gla95] و Watt و Policarpo [Wat98] برای فعالان Computer Graphics مناسب‌اند.

بسیاری از روش‌های Compositing و استفاده از Alpha Channel توسط Porter و Duff [Por84] پیشنهاد شدند. OpenGL Programming Guide [Shr10] نمونه‌های متعددی از کاربرد Bufferها دارد. جزئیات فنی بسیاری از فرمت‌های Image استاندارد نیز در [Mia99, Mur94] آمده است.

تمرین‌ها

۷٫۱ نشان دهید چگونه می‌توان از XOR Writing Mode برای پیاده‌سازی Odd–Even Fill Algorithm استفاده کرد.

۷٫۲ استفاده از XOR برای حرکت Cursor روی Screen چه اثرهای بصری‌ای دارد؟

۷٫۳ Image تولیدشده با Environment Map چه تفاوتی با Ray-Traced Image همان Scene دارد؟

۷٫۴ در فیلم و تلویزیون گاهی چرخ خودروها خلاف جهت واقعی می‌چرخد. علت چیست و چگونه می‌توان آن را اصلاح کرد؟

۷٫۵ اگر Sample Data را فقط به‌صورت Point رسم کنیم و ادغام آن‌ها را به Visual System انسان واگذار کنیم، چرا در نزدیکی Nyquist Limit این روش خطرناک است؟

۷٫۶ چرا الگوی لباس‌های راه‌راه بازیگر هنگام حرکت او روی صفحهٔ تلویزیون تغییر می‌کند؟

۷٫۷ چرا Antialiasing بهتر است با Preprocessing داده انجام شود، نه Postprocessing؟

۷٫۸ دو سطح Translucent با Opacityهای (\alpha_1) و (\alpha_2) را در نظر بگیرید. Opacity مادهٔ ترکیبی حاصل از قرارگرفتن این دو به‌صورت متوالی چیست؟ برای Transparency ترکیبی رابطه‌ای ارائه کنید.

۷٫۹ اگر سطوح Translucent را Filter نور عبوری بدانیم، یک Blending Model بر پایهٔ Complementary Colorهای CMY طراحی کنید.

۷٫۱۰ در بخش ۷٫۱۱ از (1-\alpha) و α به‌ترتیب برای Destination و Source Blending Factor استفاده کردیم. اگر Destination Factor را ۱ نگه داریم و Source Factor همچنان α باشد، تفاوت بصری چیست؟

۷٫۱۱ Paintbrushهای تعاملی بسازید که Color را به‌تدریج به Image اضافه کنند. همچنین با Blending، Eraserهایی بسازید که Image را به‌تدریج از Screen حذف کنند.

۷٫۱۲ روشی برای استفاده از Texture Mapping جهت نمایش آرایه‌های Pixel سه‌بعدی یا Voxel طراحی کنید.

۷٫۱۳ نشان دهید چگونه می‌توان از Luminance Histogram یک Image، Lookup Tableای ساخت که Histogram تصویر اصلاح‌شده را تقریباً Flat کند.

۷٫۱۴ هنگام Supersampleکردن Scene با Jitter، چرا بهتر است Jitter Pattern تصادفی باشد؟

۷٫۱۵ مجموعه‌ای از اشیا با الگوهای منظم مانند Stripe و Checkerboard Texture Mapping شده‌اند. هنگام تغییر Parallel View به Perspective View، Aliasing Pattern چه تفاوتی خواهد کرد؟

۷٫۱۶ صحنه‌ای از اشیای ساده مانند Parallelepiped با اندازه‌های مختلف داریم و یک Texture Map واحد باید روی همهٔ آن‌ها اعمال شود. Texture Coordinateها را چگونه تعیین می‌کنید تا اندازهٔ Pattern روی همهٔ Faceها یکسان دیده شود؟

۷٫۱۷ برنامه‌ای با Mipmap بنویسید که هر Mipmap از Image متفاوتی ساخته شود. آیا کاربرد عملی برای این روش وجود دارد؟

۷٫۱۸ با Convolution Code خودتان یا Imaging Extensionهای OpenGL، یک برنامهٔ عمومی Filtering با Kernel (3\times3) برای Luminance Imageها پیاده‌سازی کنید.

۷٫۱۹ یک Image از Digital Camera یا منبع دیگر بگیرید و Filterهای Smoothing و Sharpening (3\times3) را به‌طور تکراری اعمال کنید. رفتار Edgeهای Image را دقیق بررسی کنید.

۷٫۲۰ تمرین ۷٫۱۹ را پس از افزودن مقدار کمی Random Noise تکرار و تفاوت نتایج را تحلیل کنید.

۷٫۲۱ اگر سامانه Imaging Extensionها را پشتیبانی می‌کند، Performance Filtering با Extensionها را با Filtering توسط کد خودتان در Processor Memory مقایسه کنید.

۷٫۲۲ یکی از روش‌های مؤثر تغییر Contrast، طراحی تعاملی Lookup است. Graphی در نظر بگیرید که Curve آن با سه Line Segment متصل تقریب زده می‌شود. برنامه‌ای بنویسید که Image را نمایش دهد، کاربر Segmentها را تعاملی تعیین کند و نتیجهٔ اعمال Curve را هم‌زمان نشان دهد.

۷٫۲۳ مشابه تمرین ۷٫۲۲، برنامه‌ای تعاملی برای طراحی Pseudocolor Map توسط کاربر بنویسید.

۷٫۲۴ روشی برای تبدیل مقادیر Cube Map به مقادیر متناظر Spherical Map طراحی کنید.

۷٫۲۵ برنامه‌ای تعاملی بنویسید که Color Pixelهای انتخاب‌شده روی Display را برگرداند.

۷٫۲۶ می‌خواهیم Cubeای بسازیم که روی Faceهای آن Texture شطرنجی سیاه‌وسفید قرار گیرد. آیا می‌توان Texture را طوری نگاشت کرد که هنگام عبور از یک Face به Face بعدی، Color مربع‌ها به‌طور متناوب و پیوسته ادامه یابد؟

۷٫۲۷ در چه نوع Applicationهایی Front-to-Back Rendering را به Back-to-Front ترجیح می‌دهید؟

۷٫۲۸ Color Gamut در Chromaticity Coordinates معادل Triangleای در RGB Space است که با Primaryها تعریف می‌شود. برنامه‌ای بنویسید که این Triangle و Edgeهای Cube حاوی آن را نمایش دهد. Color هر نقطه روی Triangle باید از RGB Coordinateهای همان نقطه تعیین شود. این Triangle را Maxwell Triangle می‌نامند.

۷٫۲۹ Matrix تبدیل NTSC RGB را پیدا کنید و با آن Color Gamut نمایشگر را در xy Chromaticity Coordinates دوباره نمایش دهید.

۷٫۳۰ نشان دهید Normal Matrix همان Inverse Transpose زیرماتریس (3\times3) بالا-چپ Model-View Matrix است.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620