فصل ۱: سامانهها و مدلهای گرافیکی
اهمیت فناوریهای رایانه و ارتباطات در زندگی ما را بهسختی میتوان بیش از اندازه بیان کرد. فعالیتهایی به گستردگی فیلمسازی، نشر، بانکداری و آموزش، با تغییر روش انجام امور روزمره بهوسیله این فناوریها دگرگونیهای بنیادین یافتهاند. ترکیب رایانهها، شبکهها و سامانه پیچیده بینایی انسان از طریق گرافیک رایانهای، نقشی اساسی در این پیشرفتها داشته و راههای تازهای برای نمایش اطلاعات، دیدن جهانهای مجازی و ارتباط با انسانها و ماشینها پدید آورده است.
گرافیک رایانهای به همه جنبههای تولید تصویر با استفاده از رایانه میپردازد. این حوزه حدود پنجاه سال پیش با نمایش چند خط روی لوله پرتو کاتدی یا CRT آغاز شد؛ امروزه میتوان با رایانه تصویرهایی تولید کرد که از عکس اشیای واقعی قابل تشخیص نیستند. آموزش خلبانها با هواپیماهای شبیهسازیشده و نمایش گرافیکی بلادرنگ یک محیط مجازی اکنون امری عادی است. فیلمهای بلند کاملاً ساختهشده با رایانه نیز هم از نظر هنری و هم از نظر اقتصادی موفق بودهاند.
در این فصل، سفر خود را با بحث کوتاهی درباره کاربردهای گرافیک رایانهای آغاز میکنیم و سپس مروری بر سامانههای گرافیکی و تصویربرداری داریم. در سراسر کتاب، بر رابطه میان گرافیک رایانهای و تشکیل تصویر با روشهای آشنایی مانند طراحی دستی و عکاسی تأکید میشود. خواهیم دید این روابط به طراحی برنامههای کاربردی، کتابخانههای گرافیکی و معماری سامانههای گرافیکی کمک میکنند.
در کتاب یک سامانه نرمافزاری گرافیکی مشخص، یعنی OpenGL، معرفی میشود که به استانداردی پذیرفتهشده برای توسعه برنامههای گرافیکی تبدیل شده است. خوشبختانه یادگیری OpenGL آسان است و بسیاری از ویژگیهای سامانههای گرافیکی پرکاربرد دیگر را دارد. رویکرد کتاب بالا به پایین است: هدف این است که هرچه زودتر نوشتن برنامههایی را آغاز کنید که خروجی گرافیکی تولید میکنند. پس از شروع با برنامههای ساده، درباره نحوه پیادهسازی کتابخانه گرافیکی و سختافزار زیرین بحث میکنیم. این فصل باید دید کلی کافی برای ورود به برنامهنویسی فراهم کند.
۱.۱ کاربردهای گرافیک رایانهای
توسعه گرافیک رایانهای هم از نیازهای جامعه کاربران و هم از پیشرفت سختافزار و نرمافزار تأثیر گرفته است. کاربردهای این حوزه فراوان و متنوعاند، اما میتوان آنها را در چهار دسته اصلی جای داد:
- نمایش اطلاعات؛
- طراحی؛
- شبیهسازی و پویانمایی؛
- رابطهای کاربری.
بسیاری از کاربردها بیش از یکی از این حوزهها را پوشش میدهند، اما رشد تاریخی این رشته بر کارهای جداگانهای استوار بوده که در هر یک از این زمینهها انجام شده است.
۱.۱.۱ نمایش اطلاعات
روشهای کلاسیک گرافیکی در اصل بهعنوان رسانهای برای انتقال اطلاعات میان انسانها شکل گرفتند. زبان گفتاری و نوشتاری نیز چنین نقشی دارد، اما سامانه بینایی انسان هم در پردازش داده و هم در تشخیص الگو بیرقیب است. بیش از چهار هزار سال پیش بابلیها نقشه کف ساختمانها را روی سنگ نمایش میدادند. بیش از دو هزار سال پیش یونانیها میتوانستند ایدههای معماری خود را بهصورت گرافیکی منتقل کنند، درحالیکه ریاضیات مرتبط تا دوران رنسانس توسعه نیافته بود. امروزه معماران، طراحان مکانیکی و نقشهکشها همان نوع اطلاعات را با سامانههای ترسیم مبتنی بر رایانه تولید میکنند.
قرنهاست نقشهنگاران برای نمایش اطلاعات آسمانی و جغرافیایی نقشه میسازند. این نقشهها برای دریانوردان و کاوشگران حیاتی بودند و امروزه نیز در زمینههایی مانند سامانههای اطلاعات جغرافیایی اهمیت کمتری ندارند. اکنون نقشهها را میتوان در زمان واقعی روی اینترنت ایجاد و دستکاری کرد.
در صد سال گذشته پژوهشگران آمار روشهایی برای ساخت نمودار توسعه دادهاند تا مشاهدهگر بتواند اطلاعات نهفته در مجموعه داده را بهتر تشخیص دهد. بستههای نرمافزاری رسم نمودار امروز مجموعه متنوعی از روشهای ترسیم و ابزارهای رنگی برای کار با چند مجموعه داده بزرگ فراهم میکنند. بااینحال، در نهایت توانایی انسان در تشخیص الگوهای دیداری است که تفسیر اطلاعات دادهها را ممکن میکند. Information Visualization (نمایش دیداری اطلاعات) با نیاز به فهم پدیدههای پیچیده، از مسائل زیستاطلاعرسانی تا تشخیص تهدیدهای امنیتی، اهمیت فزایندهای یافته است.
تصویربرداری پزشکی نیز مسائل مهم و جالبی در تحلیل داده ایجاد میکند. فناوریهایی مانند CT، MRI، سونوگرافی و PET دادههای سهبعدی تولید میکنند که برای ارائه اطلاعات مفید باید بهصورت الگوریتمی پردازش شوند. صفحه رنگی ۲۰ تصویری از سر انسان نشان میدهد که پوست در آن شفاف و ساختارهای داخلی مات نمایش داده شدهاند. دادهها با سامانه پزشکی گردآوری شدهاند، اما خود تصویر نمایانگر ساختارها با گرافیک رایانهای تولید شده است.
ابررایانهها اکنون به پژوهشگران بسیاری از حوزهها اجازه میدهند مسائلی را حل کنند که پیشتر عملاً حلناپذیر بودند. Scientific Visualization (نمایش دیداری علمی) ابزارهای گرافیکی لازم برای تفسیر حجم عظیم داده تولیدشده را در اختیار آنان میگذارد. در حوزههایی مانند جریان سیال، زیستشناسی مولکولی و ریاضیات، تبدیل داده به موجودیتهای هندسی قابل نمایش، بینشهای تازهای درباره فرایندهای پیچیده ایجاد کرده است. برای مثال، صفحه رنگی ۱۹ پویایی سیال در گوشته زمین را نمایش میدهد؛ دادهها بهکمک یک مدل ریاضی تولید شدهاند. در ادامه کتاب روشهای مختلف نمایش دیداری در قالب مثال معرفی خواهند شد.
۱.۱.۲ طراحی
حرفههایی مانند مهندسی و معماری با طراحی سروکار دارند. مهندس و معمار از مجموعهای از مشخصات آغاز میکنند و بهدنبال راهحلی اقتصادی و زیباشناختی هستند که آن مشخصات را برآورده کند. طراحی فرایندی تکرارشونده است. در دنیای واقعی بهندرت مسئلهای چنان دقیق مشخص میشود که فقط یک راهحل بهینه داشته باشد. مسئله طراحی ممکن است بیشتعیینشده باشد، یعنی هیچ راهحلی همه معیارها را برآورده نکند، یا کمتعیینشده باشد و راهحلهای متعددی داشته باشد. بنابراین طراح بهصورت تکراری کار میکند: طرحی ممکن را میسازد، آن را میآزماید و بر پایه نتیجه، گزینههای دیگر را بررسی میکند.
قدرت الگوی تعامل انسان با تصاویر روی صفحه CRT بیش از چهل سال پیش توسط Ivan Sutherland شناخته شد. امروزه ابزارهای گرافیکی تعاملی در CAD یا طراحی به کمک رایانه در حوزههایی مانند معماری، طراحی قطعات مکانیکی و مدارهای مجتمع VLSI فراگیرند. در چنین کاربردهایی گرافیک چند نقش مستقل دارد. مثلاً در طراحی VLSI، منوها و آیکونها یک رابط تعاملی میان کاربر و بسته طراحی فراهم میکنند و پس از ایجاد طرح، ابزارهای دیگر آن را تحلیل و نتیجه را بهصورت گرافیکی نمایش میدهند. صفحات رنگی ۹ و ۱۰ دو نمای متفاوت از یک طراحی معماری واحد هستند که هر دو با یک سامانه CAD تولید شدهاند و اهمیت توانایی تولید تصاویر مختلف از همان اشیا در مرحلههای مختلف فرایند طراحی را نشان میدهند.
۱.۱.۳ شبیهسازی و پویانمایی
وقتی سامانههای گرافیکی توانستند در زمان واقعی تصاویر پیچیده تولید کنند، مهندسان و پژوهشگران به استفاده از آنها بهعنوان شبیهساز روی آوردند. یکی از مهمترین کاربردها آموزش خلبانان بوده است. شبیهسازهای پرواز گرافیکی هم ایمنی را افزایش داده و هم هزینه آموزش را کاهش دادهاند. استفاده از تراشههای خاص VLSI نسلهایی از بازیهای Arcade پدید آورده که از نظر پیچیدگی به شبیهسازهای پرواز نزدیکاند. بازیها و نرمافزارهای آموزشی رایانههای خانگی نیز چشمگیرند.
موفقیت شبیهساز پرواز، استفاده از گرافیک رایانهای برای پویانمایی در تلویزیون، سینما و تبلیغات را گسترش داد. اکنون میتوان فیلمهای پویانمایی کامل را با رایانه و با هزینهای کمتر از روشهای سنتی پویانمایی دستی تولید کرد. ترکیب گرافیک رایانهای و پویانمایی دستی نیز جلوههای فنی و هنریای میسازد که هیچیک بهتنهایی قادر به ایجاد آنها نیستند. پویانمایی رایانهای ظاهر ویژهای دارد، اما رایانه میتواند تصاویر واقعگرایانه نیز تولید کند.
تصویرهایی که در تلویزیون، فیلمها و مجلات میبینیم گاهی آنقدر واقعگرایانهاند که تشخیص تصویر تولید یا اصلاحشده با رایانه از عکس دشوار است. فصل ۵ بسیاری از جلوههای نورپردازی مورد استفاده در پویانمایی رایانهای را بررسی میکند. صفحات رنگی ۲۳ و ۱۶ نمونههایی از نورپردازی واقعگرایانهاند که هنرمندان و متخصصان رایانه با نرمافزار پویانمایی ایجاد کردهاند. هرچند این تصاویر برای تولیدات تجاری ساخته شدهاند، نرمافزار تعاملی تولید چنین جلوههایی بهطور گسترده در دسترس است. صفحه رنگی ۱۴ برخی مرحلههای ساخت یک پویانمایی را نشان میدهد و صفحات رنگی ۱۵ و ۱۶ نیز رندرهای واقعگرایانه هستند.
Virtual Reality یا VR (واقعیت مجازی) افقهای تازهای گشوده است. مشاهدهگر میتواند هدستی بپوشد که برای چشم چپ و راست تصاویر جداگانه تولید میکند تا حس دید استریوسکوپی شکل بگیرد. همزمان رایانه مکان و وضعیت بدن، و در صورت لزوم سر و انگشتان، را ردگیری میکند. ابزارهای تعاملی دیگری مانند دستکش حساس به نیرو و سامانه صوتی نیز میتوانند اضافه شوند. در نتیجه کاربر بخشی از صحنه تولیدشده با رایانه میشود و محدودیت اصلی توان تولید تصویر سامانه است. کارآموز جراحی را میتوان در چنین محیطی برای عمل آموزش داد یا فضانورد را برای کار در شرایط بیوزنی آماده کرد. صفحه رنگی ۲۲ یک فریم از شبیهسازی VR یک بیمار مصنوعی را برای آموزش از راه دور کارکنان پزشکی نشان میدهد.
شبیهسازی و واقعیت مجازی در صنعت سینما نیز به شکلهای هیجانانگیزی با هم ترکیب شدهاند. فیلمهای استریو یا سهبعدی در سالهای اخیر هم سودآور و هم نزد مخاطبان موفق بودهاند. تقریباً همه فیلمها از جلوههای ویژه گرافیک رایانهای استفاده میکنند؛ حتی کاربردهای کمنمایشتر مانند حذف مصنوعات ناخواسته از صحنه رایج است. شبیهسازی فیزیک نیز برای ساخت جلوههایی از جریان سیال تا پویایی جمعیت استفاده میشود.
۱.۱.۴ رابطهای کاربری
تعامل ما با رایانه تا حد زیادی زیر سلطه یک الگوی دیداری متشکل از پنجرهها، آیکونها، منوها و دستگاه اشارهگر مانند ماوس قرار گرفته است. از دید کاربر، سامانههای پنجرهای مانند X Window System، Microsoft Windows و سیستمعامل Macintosh فقط در جزئیات تفاوت دارند. میلیونها نفر نیز از طریق مرورگرهای گرافیکی شبکه مانند Firefox، Chrome، Safari و Internet Explorer به اینترنت دسترسی پیدا کردهاند و همان ابزارهای رابط را به کار میگیرند. این شیوه آنقدر عادی شده که اغلب فراموش میکنیم در حال استفاده از گرافیک رایانهای هستیم.
هرچند رابط گرافیکی رایج در Workstationها برای ما آشناست، پیشرفت گرافیک رایانهای شکلهای دیگری از رابط را نیز ممکن کرده است. صفحه رنگی ۱۳ رابط یک بسته مدلسازی سطحبالا را نمایش میدهد و تنوع ابزارها و دستگاههای تعاملی قابل استفاده در مدلسازی اشیای هندسی را نشان میدهد.
یادداشت: در زمان نگارش کتاب، رایانه شخصی و Workstation مسیر تاریخی متفاوتی داشتند، اما از نظر بنیادی تفاوت چشمگیری میان آنها باقی نمانده بود؛ بنابراین این دو اصطلاح در کتاب مترادف به کار میروند.
۱.۲ یک سامانه گرافیکی
سامانه گرافیک رایانهای در اصل یک سامانه رایانهای است و بنابراین همه اجزای یک رایانه همهمنظوره را دارد. نمای سطحبالای شکل ۱.۱ شش عنصر اصلی را نشان میدهد:
- دستگاههای ورودی؛
- واحد پردازش مرکزی؛
- واحد پردازش گرافیکی؛
- حافظه؛
- بافر فریم؛
- دستگاههای خروجی.
این مدل آنقدر عمومی است که Workstation و رایانه شخصی، سامانه بازی تعاملی، تلفن همراه، سامانه GPS و سامانههای پیشرفته تولید تصویر را دربر گیرد. بیشتر اجزا در رایانه استاندارد نیز وجود دارند؛ چیزی که این شکل را به مدل یک سامانه گرافیکی تبدیل میکند، تخصصیشدن هر عنصر برای پردازش گرافیک است.
۱.۲.۱ پیکسلها و بافر فریم
تقریباً همه سامانههای گرافیکی جدید مبتنی بر Raster (رستر) هستند. تصویری که روی دستگاه خروجی میبینیم آرایهای از Picture Elementها یا Pixelهاست که سامانه گرافیکی تولید میکند. هر پیکسل متناظر با یک مکان یا ناحیه کوچک در تصویر است. مجموعه پیکسلها در بخشی از حافظه به نام Frame Buffer (بافر فریم) نگهداری میشود. بافر فریم را میتوان عنصر مرکزی سامانه گرافیکی دانست.
شکل ۱.۱ — یک سامانه گرافیکی: ارتباط پردازنده مرکزی، پردازنده گرافیکی، حافظههای CPU و GPU، بافر فریم، ورودی و خروجی را نشان میدهد.
شکل ۱.۲ — پیکسلها: (الف) تصویر گربهای به نام Yeti؛ (ب) بزرگنمایی ناحیه پیرامون یک چشم که پیکسلهای منفرد را نشان میدهد.
Resolution (تفکیکپذیری) بافر فریم، یعنی تعداد پیکسلهای آن، مقدار جزئیاتی را تعیین میکند که در تصویر قابل مشاهده است. Depth یا Precision (عمق یا دقت) بافر فریم، یعنی تعداد بیتهای اختصاصیافته به هر پیکسل، ویژگیهایی مانند تعداد رنگهای قابل نمایش را تعیین میکند. بافر ۱ بیتی فقط دو رنگ و بافر ۸ بیتی ۲^۸ یا ۲۵۶ رنگ را ممکن میسازد. سامانههای تمامرنگی ۲۴ بیت یا بیشتر برای هر پیکسل دارند و آنقدر رنگ نمایش میدهند که بیشتر تصاویر واقعگرایانه به نظر برسند. این سامانهها True Color یا RGB Color نیز نامیده میشوند، زیرا گروههای جداگانهای از بیتهای هر پیکسل به سه رنگ اصلی قرمز، سبز و آبی اختصاص داده میشوند.
سامانههای HDR یا High Dynamic Range (دامنه دینامیکی بالا) برای هر مؤلفه رنگی ۱۲ بیت یا بیشتر استفاده میکنند. تا مدتها رنگها در بافر فریم با قالب عدد صحیح ذخیره میشدند، اما بافرهای جدید از اعداد ممیز شناور استفاده میکنند و پشتیبانی از رنگ HDR را سادهتر میسازند.
در یک سامانه بسیار ساده، بافر فریم فقط پیکسلهای رنگی قابل نمایش را نگه میدارد. در بیشتر سامانهها اطلاعات بسیار بیشتری، از جمله عمق لازم برای ساخت تصویر از دادههای سهبعدی، در آن قرار دارد. در این حالت بافر فریم از چند بافر تشکیل میشود که یک یا چند Color Buffer (بافر رنگ) پیکسلهای نمایشدادهشده را نگه میدارند. در این مرحله از کتاب میتوان اصطلاحهای بافر فریم و بافر رنگ را بدون ایجاد ابهام مترادف در نظر گرفت.
۱.۲.۲ CPU و GPU
در سامانه ساده ممکن است فقط یک پردازنده، یعنی CPU، وجود داشته باشد که هم پردازش عادی و هم پردازش گرافیکی را انجام دهد. وظیفه اصلی گرافیکی پردازنده این است که مشخصات بدویهای گرافیکی مانند خط، دایره و چندضلعی تولیدشده توسط برنامه کاربردی را بگیرد و برای پیکسلهای بافر فریم مقادیری تعیین کند که بهترین نمایش آن موجودیتها باشد.
برای نمونه، مثلث با سه رأس تعریف میشود، اما برای نمایش مرز آن با سه پارهخط، سامانه باید مجموعهای از پیکسلها بسازد که برای مشاهدهگر شبیه سه پارهخط به نظر برسند. تبدیل موجودیت هندسی به رنگ و مکان پیکسل در بافر فریم Rasterization (رسترسازی) یا Scan Conversion نام دارد.
در سامانههای نخستین، بافر فریم بخشی از حافظه استاندارد بود که CPU مستقیماً به آن آدرس میداد. امروزه تقریباً همه سامانههای گرافیکی دارای GPUهای ویژهای هستند که برای اجرای عملیات خاص گرافیکی طراحی شدهاند. GPU ممکن است روی برد اصلی یا کارت گرافیک باشد. بافر فریم از طریق GPU در دسترس قرار میگیرد و معمولاً روی همان برد مدار قرار دارد.
GPUها چنان تکامل یافتهاند که پیچیدگی آنها با CPU برابری میکند یا حتی از آن بیشتر است. آنها هم ماژولهای ویژه عملیات گرافیکی دارند و هم سطح بالایی از Parallelism (پردازش موازی). GPUهای جدید بیش از صد واحد پردازشی دارند که هر یک قابل برنامهریزی توسط کاربر است. قدرت این پردازندهها به اندازهای است که گاهی میتوان از آنها مانند ابررایانههای کوچک برای محاسبات عمومی استفاده کرد. معماری GPU در بخش ۱.۷ با جزئیات بیشتر بررسی میشود.
۱.۲.۳ دستگاههای خروجی
تا سالهای نزدیک به نگارش کتاب، نوع غالب نمایشگر CRT بود. در یک CRT ساده، برخورد الکترونها به پوشش فسفری لوله باعث گسیل نور میشود. جهت پرتو با دو جفت صفحه انحراف کنترل میشود. خروجی رایانه بهوسیله مبدلهای دیجیتال به آنالوگ به ولتاژ روی صفحات انحراف x و y تبدیل میشود. وقتی پرتوی الکترونی با شدت کافی به فسفر هدایت شود، سطح CRT روشن میشود.
شکل ۱.۳ — لوله پرتو کاتدی: تفنگ الکترونی، صفحات انحراف x و y، سامانه فوکوس و پوشش فسفری را نشان میدهد.
اگر ولتاژهای هدایتکننده پرتو با نرخ ثابت تغییر کنند، پرتو خطی مستقیم و قابل مشاهده رسم میکند. چنین دستگاهی Random-Scan، Calligraphic یا Vector CRT نام دارد، زیرا پرتو میتواند مستقیماً از هر موقعیت به هر موقعیت دیگری منتقل شود. با خاموش کردن شدت پرتو، جابهجایی بدون تغییر قابل مشاهده در تصویر انجام میشود. این آرایش پایه سامانههای گرافیکی نخستین، پیش از رواج فناوری Raster، بود.
یک CRT معمولی پس از تحریک فسفر فقط برای مدت کوتاهی، معمولاً چند میلیثانیه، نور میدهد. برای اینکه انسان تصویر ثابت و بدون لرزش ببیند، همان مسیر باید با نرخ کافی دوباره رسم یا Refresh شود. در سامانههای قدیمی، نرخ تازهسازی به فرکانس برق وابسته بود: ۶۰ هرتز در ایالات متحده و ۵۰ هرتز در بسیاری مناطق دیگر. نمایشگرهای جدید از این فرکانسهای پایین مستقلاند و در زمان نگارش کتاب تا حدود ۸۵ هرتز کار میکردند.
در سامانه Raster، پیکسلهای بافر فریم به دو روش بنیادی روی نمایشگر نشان داده میشوند. در سامانه Noninterlaced (غیر درهمبافته)، پیکسلها سطر به سطر یا Scanline به Scanline با نرخ تازهسازی نمایش داده میشوند. در نمایش Interlaced (درهمبافته)، سطرهای فرد و زوج بهصورت متناوب تازه میشوند. تلویزیون تجاری سنتی از این روش استفاده میکند. در نمایشگر ۶۰ هرتزی درهمبافته، کل صفحه در واقع فقط ۳۰ بار در ثانیه دوباره رسم میشود، هرچند سامانه بینایی آن را تقریباً ۶۰ هرتز درک میکند. مشاهدهگر نزدیک صفحه تفاوت را تشخیص میدهد. نمایشگرهای غیردرهمبافته با وجود نیاز به پردازش دوبرابر پیکسلها فراگیرتر شدهاند.
CRT رنگی سه فسفر قرمز، سبز و آبی دارد که در گروههای کوچک قرار میگیرند. در آرایش رایج، سه فسفر اصلی یک Triad میسازند. بیشتر CRTهای رنگی سه پرتو الکترونی متناظر با سه فسفر دارند. در Shadow-Mask CRT، صفحه فلزی سوراخداری تضمین میکند هر پرتو فقط فسفر رنگ مناسب را تحریک کند.
هرچند CRT مدتها دستگاه نمایش رایجی بود، فناوریهای صفحه تخت بهسرعت جای آن را گرفتند. نمایشگر تخت ذاتاً Raster است. فناوریهایی مانند LED، LCD و Plasma همگی از شبکه دوبعدی برای آدرسدهی عناصر نورده مستقل استفاده میکنند. در مدل عمومی شکل ۱.۵، دو صفحه بیرونی هرکدام شبکهای از سیمهای موازی دارند که بر هم عمودند. با اعمال سیگنال به سیم مناسب در هر شبکه، میدان الکتریکی در محل تقاطع آنقدر قوی میشود که عنصر متناظر در صفحه میانی را کنترل کند. در پنل LED، دیودهای نورده با این سیگنال روشن و خاموش میشوند. در LCD، میدان الکتریکی قطبش بلور مایع را کنترل میکند و عبور نور را تغییر میدهد. در پنل Plasma، ولتاژ شبکه گاز میان صفحات شیشهای را برانگیخته و به پلاسمای نورانی تبدیل میکند.
شکل ۱.۴ — CRT دارای Shadow Mask: سه تفنگ رنگی، ماسک سایه و Triad فسفرهای قرمز، سبز و آبی.
شکل ۱.۵ — نمایشگر تخت عمومی: شبکههای افقی و عمودی و عناصر نورده میان آنها.
بیشتر سامانههای پروژکتور نیز Raster هستند و فناوریهایی مانند CRT و DLP به کار میبرند. از دید کاربر مانند مانیتورهای معمولی رفتار میکنند و تفکیکپذیری و دقت مشابهی دارند. دستگاههای Hard Copy مانند چاپگر و Plotter نیز Raster هستند، اما مفهوم تازهسازی درباره آنها وجود ندارد.
۱.۲.۴ دستگاههای ورودی
بیشتر سامانههای گرافیکی یک صفحهکلید و دستکم یک دستگاه ورودی دیگر دارند. رایجترینها ماوس، Joystick و Data Tablet هستند. هرکدام اطلاعات موقعیتی فراهم میکنند و معمولاً یک یا چند دکمه برای ارسال سیگنال به پردازنده دارند. این ابزارها که اغلب Pointing Device نامیده میشوند به کاربر اجازه میدهند مکانی خاص روی نمایشگر را مشخص کند.
سامانههای جدید مانند کنسول بازی مجموعه بسیار غنیتری از دستگاههای ورودی دارند و ابزارهای تازه دائماً معرفی میشوند. ورودی سهبعدی و حتی با ابعاد بیشتر نیز وجود دارد؛ بنابراین به مدلی انعطافپذیر نیاز داریم تا داده این دستگاهها را وارد برنامه گرافیکی کنیم.
میتوان دستگاه ورودی را به دو شیوه متفاوت دید. نگاه نخست آن را یک دستگاه فیزیکی مانند صفحهکلید یا ماوس در نظر میگیرد و سازوکارش را بررسی میکند. شناخت ویژگیهای فیزیکی برای فهم کامل ورودی ضروری است، اما از دید برنامهنویس کاربردی نباید لازم باشد برای نوشتن برنامه جزئیات هر دستگاه فیزیکی را بداند. ترجیح این است که دستگاهها بهصورت Logical Device (دستگاه منطقی) دیده شوند؛ یعنی ویژگی آنها بر اساس کاری که از دید برنامه انجام میدهند تعریف شود، نه بر اساس ساختار فیزیکی.
این جداسازی در برنامهنویسی سطحبالا آشناست. برای مثال ورودی و خروجی در C از توابعی مانند printf، scanf، getchar و putchar و در C++ از جریانهای cin و cout استفاده میکند. وقتی رشتهای با printf خروجی میدهیم، مقصد فیزیکی میتواند چاپگر، ترمینال یا فایل دیسک باشد و حتی خروجی میتواند ورودی برنامه دیگری شود. جزئیات قالب مورد نیاز دستگاه مقصد مسئله اصلی نویسنده برنامه کاربردی نیست.
در گرافیک رایانهای، دستگاه منطقی کمی پیچیدهتر است، زیرا شکلهای ورودی از رشته بیت یا نویسه متنوعترند. یک ماوس میتواند برای انتخاب مکان روی صفحه یا انتخاب گزینه منو استفاده شود. در حالت اول یک زوج x و y در دستگاه مختصات مناسب به برنامه برمیگردد؛ در حالت دوم ممکن است فقط عدد صحیح شناسه گزینه منو بازگردد. جداسازی فیزیکی و منطقی اجازه میدهد یک دستگاه فیزیکی را برای کاربردهای منطقی کاملاً متفاوت استفاده کنیم و نیز همان برنامه بدون تغییر با جایگزین کردن ماوس با Data Tablet یا Trackball کار کند.
۱.۲.۵ دستگاههای ورودی فیزیکی
از دید فیزیکی، هر دستگاه ویژگیهایی دارد که آن را برای برخی وظایف مناسبتر میکند. در ادبیات Workstationها معمولاً دو نوع اصلی در نظر گرفته میشود: دستگاه اشارهگر و دستگاه صفحهکلید. دستگاه اشارهگر امکان تعیین موقعیت روی صفحه را میدهد و تقریباً همیشه دکمهای برای ارسال سیگنال یا وقفه دارد. دستگاه صفحهکلید معمولاً صفحهکلید واقعی است، اما میتوان آن را به هر وسیلهای تعمیم داد که کد نویسه برگرداند. مثالهای کتاب از ASCII استفاده میکنند که برای هر نویسه یک بایت بدون علامت تعیین میکند. انتخاب ASCII محدودیت بنیادی نیست؛ کدهای دیگر، بهویژه در کاربردهای اینترنتی، چند بایت برای هر نویسه استفاده میکنند و مجموعه نویسه بسیار غنیتری را پشتیبانی میکنند.
ماوس و Trackball از نظر استفاده و حتی ساختمان بسیار شبیهاند. بسیاری از ماوسهای مکانیکی اگر وارونه شوند تقریباً شبیه Trackball هستند. حرکت گوی توسط جفت Encoder داخلی به سیگنال تبدیل میشود و حرکت در دو جهت متعامد اندازهگیری میگردد.
گونههای زیادی از این دستگاهها وجود دارد. برخی بهجای آشکارساز مکانیکی از حسگر نوری استفاده میکنند. Trackballهای کوچک در رایانههای قابل حمل محبوب بودند، زیرا مستقیماً در صفحهکلید جا میگرفتند. دستگاههای حساس به فشار نیز در صفحهکلید وجود دارند که نقشی مشابه ماوس و Trackball دارند اما حرکت نمیکنند؛ Encoder آنها فشار واردشده بر یک برجستگی کوچک میان کلیدها را اندازه میگیرد.
خروجی ماوس یا Trackball را میتوان دو مقدار مستقل در نظر گرفت. این مقدارها ممکن است موقعیت تلقی شوند و توسط سامانه یا برنامه کاربر به یک مکان دوبعدی در دستگاه مختصات مناسب تبدیل شوند. اگر دستگاه چنین پیکربندی شود، میتواند Cursor را خودکار روی نمایشگر قرار دهد، هرچند این دستگاهها بهندرت به این شکل مستقیم استفاده میشوند.
لازم نیست خروجی Encoder بهعنوان موقعیت تفسیر شود. Driver یا برنامه میتواند آن را دو سرعت مستقل بداند و سپس آنها را انتگرال بگیرد تا موقعیت دوبعدی حاصل شود. وقتی ماوس روی سطح حرکت میکند، انتگرال سرعتها مقادیر x و y را ایجاد میکند و این مقادیر برای موقعیت Cursor به کار میروند. تفسیر فاصله طیشده گوی بهعنوان سرعت، دستگاه را به ورودی با حساسیت متغیر تبدیل میکند: انحراف اندک تغییر آهسته و کوچک و انحراف زیاد تغییر سریع و بزرگ ایجاد میکند. اگر گوی نچرخد انتگرال تغییر نمیکند و Cursor ثابت میماند. به همین دلیل ماوس و Trackball در این حالت دستگاههای موقعیتدهی نسبی هستند؛ برنامه از تغییر وضعیت استفاده میکند، نه از مکان مطلق خود دستگاه.
موقعیتدهی نسبی همیشه مطلوب نیست؛ برای مثال ماوس ابزار مناسبی برای Trace کردن یک نمودار نیست. اگر کاربر هنگام دنبال کردن یک منحنی ماوس را بلند و جابهجا کند، رابطه با مکان مطلق منحنی از بین میرود.
شکل ۱.۶ — ماوس.
شکل ۱.۷ — Trackball.
شکل ۱.۸ — موقعیتدهی Cursor: سرعتهای v_x و v_y با انتگرالگیری به x و y تبدیل میشوند.
Data Tablet موقعیتدهی مطلق فراهم میکند. یک نمونه معمولی ردیفها و ستونهایی از سیم در زیر سطح دارد و مکان Stylus از تعامل الکترومغناطیسی سیگنالهای سیمها و حسگر قلم تعیین میشود. صفحههای شفاف حساس به لمس که روی CRT قرار میگیرند ویژگی مشابه دارند. Touchpadهای مستطیلی کوچک در صفحهکلید رایانههای قابل حمل نیز میتوانند بهصورت موقعیتدهی نسبی یا مطلق پیکربندی شوند.
Joystick نیز شایسته توجه ویژه است. حرکت دسته در دو جهت متعامد کدگذاری و بهصورت دو سرعت تفسیر میشود و با انتگرالگیری محل روی صفحه به دست میآید. اگر دسته در حالت استراحت باشد موقعیت Cursor تغییر نمیکند و هرچه بیشتر از مرکز دور شود، تغییر سریعتر است؛ بنابراین Joystick دستگاهی با حساسیت متغیر است. مزیت دیگر آن امکان استفاده از فنر و دمپر برای ایجاد مقاومت مکانیکی است. این حس فیزیکی برای شبیهساز پرواز و بازی مناسب است.
برای گرافیک سهبعدی، ورودی سهبعدی مطلوبتر است. دستگاههای مختلفی وجود دارند، اما هیچکدام در زمان نگارش کتاب به فراگیری ماوس یا دستگاههای دوبعدی نرسیده بودند. Spaceball ظاهری شبیه Joystick دارای گوی دارد، ولی دسته حرکت نمیکند و حسگرهای فشار درون گوی نیروهای کاربر را اندازه میگیرند. دستگاه سه نیروی مستقیم بالا–پایین، جلو–عقب و چپ–راست و سه پیچش مستقل را اندازه میگیرد، بنابراین شش Degree of Freedom (درجه آزادی) دارد و میتواند هم برای مکاندهی و هم جهتدهی دوربین استفاده شود.
Nintendo Wiimote با دریافت نور فروسرخ و ارسال بیسیم اندازهگیریها به میزبان، موقعیت و جهت سهبعدی دستگاه دستی را فراهم میکند.
دستگاههای دیگری مانند سامانههای Structured Light مبتنی بر Laser و Laser Ranging موقعیتهای سهبعدی را اندازه میگیرند. سامانههای Tracking مورد استفاده در VR نیز موقعیت کاربر را حس میکنند. کاربردهای واقعیت مجازی و رباتیک گاهی به درجات آزادی بیشتری از ۲ تا ۶ نیاز دارند؛ Data Gloveها میتوانند حرکت بخشهای مختلف بدن را حس کرده و سیگنالهای بیشتری تولید کنند.
شکل ۱.۹ — Data Tablet.
شکل ۱.۱۰ — Joystick.
شکل ۱.۱۱ — Spaceball.
۱.۲.۶ دستگاههای منطقی
اکنون دوباره از درون برنامه کاربردی به ورودی نگاه میکنیم. رفتار منطقی دستگاه با دو ویژگی اصلی توصیف میشود: نخست، اندازهگیریای که دستگاه به برنامه برمیگرداند و دوم، زمانی که این اندازهگیری بازگردانده میشود.
String Device منطقی همان مفهوم ورودی نویسه با scanf یا cin است. صفحهکلید فیزیکی رشتهای از نویسهها را برمیگرداند، اما همان رشته میتواند از فایل بیاید یا کاربر با یک صفحهکلید تصویری و دستگاه اشارهگر آن را تولید کند. از نظر منطقی هر سه روش یک String Device هستند و کد برنامه میتواند مستقل از دستگاه فیزیکی یکسان باشد.
دستگاه اشارهگر فیزیکی را نیز میتوان به چند روش منطقی استفاده کرد. بهعنوان Locator، یک موقعیت را در دستگاه مختصات مستقل از دستگاه مانند World Coordinates در OpenGL یا در مختصات صفحه ارائه میدهد و برنامه میتواند آن را تبدیل کند. Pick Device منطقی شناسه شیئی را که روی نمایشگر انتخاب شده برمیگرداند. معمولاً همان دستگاه فیزیکی Locator را به کار میبرد ولی رابط نرمافزاری جداگانه دارد.
Widget یک ابزار گرافیکی تعاملی است که سامانه پنجره یا Toolkit فراهم میکند. منو، Scrollbar و دکمه گرافیکی نمونههای رایجاند و بیشتر Widgetها نوع ویژهای از پنجره هستند. Widgetها دستگاههای منطقی بیشتری ایجاد میکنند؛ برای مثال منو یا ردیفی از دکمهها یکی از چند گزینه را برمیگردانند. Valuator منطقی ورودی آنالوگ فراهم میکند، معمولاً با Slider، هرچند همان مقدار میتواند با تایپ عدد در صفحهکلید نیز وارد شود.
۱.۲.۷ حالتهای ورودی
علاوه بر تنوع نوع ورودی، نحوه تحویل ورودی به برنامه گرافیکی نیز از برنامه ساده C یا C++ که فقط صفحهکلید دارد متنوعتر است. رابطه دستگاه فیزیکی و منطقی را میتوان با دو موجودیت توضیح داد: Measure Process (فرایند اندازهگیری) و Device Trigger (محرک دستگاه). Measure چیزی است که دستگاه به برنامه برمیگرداند و Trigger ورودی فیزیکیای است که کاربر با آن به رایانه علامت میدهد. برای صفحهکلید Measure یک رشته و Trigger میتواند کلید Enter باشد. برای Locator، Measure موقعیت است و Trigger میتواند دکمه دستگاه اشارهگر باشد.
Measure یک دستگاه را در سه حالت اصلی میتوان گرفت. هر حالت از رابطه میان فرایند اندازهگیری و Trigger تعریف میشود. پس از شروع Measure Process، مقدار اندازهگیری و در بافر قرار داده میشود، حتی اگر هنوز برای برنامه قابل دریافت نباشد. برای نمونه سامانه پنجره موقعیت ماوس را پیوسته ردگیری میکند، خواه برنامه در همان لحظه به ورودی ماوس نیاز داشته باشد یا نه.
در Request Mode، مقدار دستگاه تا زمان Trigger شدن به برنامه برنمیگردد. این روش در کاربردهای غیردیداری رایج است. مثلاً وقتی برنامه C به ورودی نویسه نیاز دارد و به scanf میرسد، متوقف میشود تا کاربر تایپ کند. کاربر میتواند خطا را اصلاح کند و هرقدر لازم است وقت بگذارد؛ داده در بافر صفحهکلید قرار دارد و فقط با فشردن Enter، یعنی Trigger، به برنامه تحویل میشود. Locator نیز میتواند به همین شکل کار کند: ابتدا دستگاه اشارهگر به محل دلخواه برده میشود و سپس با دکمه آن Trigger میشود.
در Sample Mode، ورودی فوری است. بهمحض اجرای فراخوانی تابع در برنامه، Measure بازگردانده میشود. بنابراین کاربر باید پیش از آن دستگاه اشارهگر را در وضعیت مناسب قرار داده یا داده را وارد کرده باشد، زیرا مقدار بیدرنگ از بافر خوانده میشود.
ویژگی مشترک Request و Sample این است که برنامه باید مشخص کند کدام دستگاه قرار است ورودی بدهد و اطلاعات دیگر دستگاهها نادیده گرفته میشود. این حالتها برای موقعیتهایی مناسباند که برنامه جریان تعامل را هدایت میکند، اما در برنامهای که کاربر جریان را کنترل میکند کافی نیستند. شبیهساز پرواز یا بازی میتواند همزمان Joystick، Dial، دکمه و Switch داشته باشد که در هر لحظه قابل استفادهاند. چون از پیش نمیدانیم کاربر در هر لحظه کدام ابزار را به کار میگیرد، کنترل چنین سامانهای تنها با Request و Sample تقریباً ناممکن است.
Event Mode (حالت رویداد) برای این تعاملها طراحی شده است. فرض کنید چند دستگاه ورودی داریم که هرکدام Trigger و Measure Process مستقل دارند. هر بار دستگاه Trigger شود، Event تولید میشود. Measure دستگاه همراه شناسه آن در Event Queue قرار میگیرد. افزودن رویداد به صف مستقل از کاری است که برنامه کاربردی با آن انجام میدهد. برنامه میتواند رویداد ابتدای صف را بررسی کند یا اگر صف خالی است منتظر بماند، سپس بر اساس نوع رویداد تصمیم بگیرد.
رویکرد دیگر این است که برای نوع مشخصی از رویداد تابعی به نام Callback تعریف شود. از دید سامانه پنجره، سیستمعامل بهطور منظم Event Queue را Poll میکند و Callback متناظر با رویدادهای موجود را اجرا میکند. کتاب همین رویکرد را برمیگزیند، زیرا در سامانههای پنجرهای اصلی رایج است و در محیط Client-Server کارایی خود را نشان داده است.
شکل ۱.۱۲ — مدل حالت رویداد: فرایند Trigger، فرایند Measure، صف رویداد و برنامه را نشان میدهد.
۱.۳ تصویرها: فیزیکی و مصنوعی
سالها روش آموزشی رایج گرافیک رایانهای از نحوه ساخت تصاویر Raster برای موجودیتهای ساده دوبعدی مانند نقطه، پارهخط و چندضلعی در بافر فریم آغاز میشد. سپس تعریف اشیای ریاضی دوبعدی و سهبعدی در رایانه و تصویر کردن آنها با مجموعهای از بدویهای دوبعدی Raster بررسی میشد.
این رویکرد برای ساخت تصاویر ساده از اشیای ساده مناسب بود. در سامانههای مدرن میخواهیم از توان نرمافزار و سختافزار برای ساخت تصاویر واقعگرایانه اشیای سهبعدی تولیدشده با رایانه استفاده کنیم؛ کاری که جنبههای متعددی از تشکیل تصویر مانند نورپردازی، سایهزنی و خواص ماده را دربر میگیرد. چون بیشتر سامانههای کنونی این قابلیتها را مستقیماً پشتیبانی میکنند، بهتر است زمینه آنها از همان ابتدا فراهم شود تا اینکه بعداً مدل محدود اولیه گسترش یابد.
تصاویر تولیدشده با رایانه Synthetic یا Artificial هستند، زیرا اشیای تصویربرداریشده لزوماً وجود فیزیکی ندارند. استدلال فصل این است که روش مطلوب تشکیل این تصاویر شباهت زیادی به روشهای سنتی تصویربرداری مانند دوربین و سامانه بینایی انسان دارد. بنابراین پیش از ورود به مکانیک نوشتن برنامه تولید تصویر، نحوه شکلگیری تصویر در سامانههای نوری بررسی میشود. از این فرایند مدلی میسازیم که برای درک و توسعه سامانههای تصویربرداری رایانهای قابل استفاده باشد.
در این فصل ریاضیات حداقلی است. هدف، تثبیت یک الگو برای ساخت تصویر و ارائه معماری رایانهای مناسب برای اجرای آن است. جزئیات و معادلات در فصلهای بعد ارائه میشوند.
۱.۳.۱ اشیا و مشاهدهگران
ما در جهانی از اشیای سهبعدی زندگی میکنیم. بسیاری از شاخههای ریاضیات، از هندسه تا مثلثات، برای نظاممند کردن ایدههای مفهومی سادهای مانند اندازه شیء و فاصله میان اشیا توسعه یافتهاند. اغلب برای نمایش فهم خود از این روابط فضایی به تصویرهایی مانند نقشه، نقاشی و عکس متوسل میشویم. توسعه دستگاههایی مانند دوربین، میکروسکوپ و تلسکوپ نیز با تمایل به مشاهده روابط فضایی اشیا پیوند خورده است. بنابراین از دیرباز رابطهای بنیادی میان فیزیک و ریاضیات تشکیل تصویر وجود داشته که در ساخت تصویربرداری رایانهای میتوان از آن بهره گرفت.
هر فرایند تشکیل تصویر، چه ریاضی و چه فیزیکی، دستکم دو موجودیت بنیادی دارد: Object (شیء) و Viewer (مشاهدهگر). شیء مستقل از فرایند تصویربرداری و مشاهدهگر در فضا وجود دارد. در گرافیک رایانهای، اشیای مصنوعی با تعیین موقعیت بدویهای هندسی مانند نقطه، خط و چندضلعی در فضا ساخته میشوند. در بسیاری از سامانهها مجموعهای از نقاط فضایی یا Vertexها برای تعریف یا تقریب بیشتر اشیا کافی است.
برای مثال خط با دو رأس، چندضلعی با فهرست مرتب رأسها و کره با دو رأس که مرکز و نقطهای روی محیط را تعیین میکنند قابل تعریف است. یکی از وظایف اصلی CAD فراهم کردن رابطی است که ساخت مدل مصنوعی جهان را برای کاربر آسان کند. فصل ۲ نشان میدهد چگونه در OpenGL اشیای ساده ساخته میشوند و فصل ۸ روش تعریف اشیا همراه با روابط میان آنها را بررسی میکند.
هر سامانه تصویربرداری باید راهی برای تولید تصویر از شیء فراهم کند. برای تشکیل تصویر به چیزی یا کسی نیاز است که اشیا را ببیند؛ انسان، دوربین یا Digitizer. این مشاهدهگر است که تصویر را شکل میدهد. در سامانه بینایی انسان تصویر پشت چشم و در دوربین روی Film Plane تشکیل میشود. اشتباه گرفتن تصویر و شیء آسان است، زیرا معمولاً شیء را از یک منظر میبینیم و فراموش میکنیم مشاهدهگر دیگری در موقعیتی متفاوت همان شیء را به شکل دیگری خواهد دید.
شکل ۱.۱۳ سه مشاهدهگر را نشان میدهد که یک ساختمان را میبینند. تصویر (الف) منظر A است که آنقدر دور قرار دارد که ساختمان و دو مشاهدهگر دیگر، B و C، را نیز میبیند. از دید A، B و C مانند خود ساختمان شیء هستند. تصاویر (ب) و (ج) همان ساختمان را از دید B و C نشان میدهند. هر سه یک ساختمان مشترک دارند، اما تصویر ساختمان در هرکدام متفاوت است.
شکل ۱.۱۳ — تصویر دیدهشده توسط سه مشاهدهگر: (الف) نمای A، (ب) نمای B، (ج) نمای C.
شکل ۱.۱۴ سامانه دوربینی را نشان میدهد که ساختمانی را میبیند. هم شیء و هم مشاهدهگر در جهان سهبعدیاند، اما تصویری که روی Projection Plane تعریف میکنند دوبعدی است. ترکیب مشخصات شیء و مشاهدهگر برای تولید تصویر دوبعدی، جوهر فرایند تشکیل تصویر است و در ادامه با جزئیات بررسی میشود.
شکل ۱.۱۴ — سامانه دوربین.
۱.۳.۲ نور و تصویرها
توصیف بالا هنوز کامل نیست، زیرا درباره نور چیزی نگفتیم. بدون منبع نور، اشیا تاریک میمانند و چیزی در تصویر دیده نمیشود. همچنین هنوز نقش رنگ و خواص سطح را مشخص نکردهایم.
با یک نگاه فیزیکیتر، آرایش شکل ۱.۱۵ را در نظر بگیرید: یک شیء فیزیکی و یک مشاهدهگر، یعنی دوربین، همراه با منبع نور. نور منبع به سطحهای مختلف شیء میتابد و بخشی از نور بازتابشده از عدسی وارد دوربین میشود. جزئیات برهمکنش نور با سطح تعیین میکند چه مقدار نور وارد دوربین شود.
شکل ۱.۱۵ — سامانه دوربین شامل شیء و منبع نور.
نور شکلی از تابش الکترومغناطیسی است. در دیدگاه کلاسیک، انرژی الکترومغناطیسی بهصورت موج حرکت میکند و با طول موج یا فرکانس مشخص میشود. طیف الکترومغناطیسی شامل موجهای رادیویی، فروسرخ یا گرمایی و بخشی است که سامانه بینایی ما به آن پاسخ میدهد. این بخش Visible Spectrum (طیف مرئی) با طول موج تقریبی ۳۵۰ تا ۷۸۰ نانومتر، نور مرئی نام دارد.
رنگ یک منبع نور از انرژی تابششده در طول موجهای مختلف تعیین میشود. طول موجهای میانی حدود ۵۲۰ نانومتر سبز، حدود ۴۵۰ نانومتر آبی و حدود ۶۵۰ نانومتر قرمز دیده میشوند. همانند رنگینکمان، طول موجهای بین قرمز و سبز زرد و طول موجهای کوتاهتر از آبی بنفش دیده میشوند.
منبع نور ممکن است در مجموعهای از فرکانسهای گسسته یا بهطور پیوسته نور منتشر کند. Laser معمولاً یک فرکانس مشخص و لامپ رشتهای گسترهای از فرکانسها را منتشر میکند. خوشبختانه در گرافیک رایانهای، جز تشخیص اینکه فرکانسهای مختلف به رنگهای مختلف دیده میشوند، معمولاً نیازی به درگیری مستقیم با فیزیک کامل نور نیست.
یادداشت ۲: در فصل ۱۱ Photon Mapping معرفی میشود که بر مدل انتشار نور در بستههای گسسته تکیه دارد.
یادداشت ۳: رابطه فرکانس f و طول موج λ برابر fλ = c است که c سرعت نور است.
شکل ۱.۱۶ — طیف الکترومغناطیسی: ناحیه نور مرئی میان تقریباً ۳۵۰ تا ۷۸۰ نانومتر و جایگاه تقریبی آبی، سبز و قرمز را نشان میدهد.
بهجای مدل کامل موجی، میتوان از مسیر سنتیتری استفاده کرد که در شدت نور کافی و مقیاسی که ماهیت موجی نور عامل اصلی نیست درست عمل میکند. Geometric Optics (اپتیک هندسی) منبع نور را گسیلکننده انرژی نوری با شدت مشخص مدل میکند. در این مدل، نور در خط مستقیم از منبع به اشیایی میرود که با آنها برهمکنش دارد.
Point Source ایدئال از یک مکان واحد در یک یا چند فرکانس و بهطور یکسان در همه جهتها انرژی منتشر میکند. منبع پیچیدهتر مانند لامپ از ناحیهای گسترده نور میدهد و ممکن است شدت تابش در جهتهای مختلف متفاوت باشد. یک منبع با شدت تابش در هر فرکانس و جهتمندی نور مشخص میشود. فعلاً فقط منبع نقطهای بررسی میشود؛ منبعهای پیچیده را اغلب میتوان با چند منبع نقطهای دقیقاً جایگذاریشده تقریب زد. مدلسازی منبع نور در فصل ۵ بررسی خواهد شد.
۱.۳.۳ مدلهای تصویربرداری
برای تشکیل تصویر از مجموعه اشیا، خواص بازتابی آنها و ویژگیهای منبعهای نور چند رویکرد وجود دارد. این بخش دو رویکرد فیزیکی را معرفی میکند. این روشها برای گرافیک بلادرنگ هدف نهایی کتاب مناسب نیستند، اما درباره ساخت معماری تصویربرداری مفید بینش میدهند و در فصل ۱۱ دوباره بررسی میشوند.
میتوان مدل را با دنبال کردن نور از منبع آغاز کرد. صحنه شکل ۱.۱۷ با یک منبع نقطهای روشن شده است و مشاهدهگر نیز در شکل آمده، زیرا نور رسیده به چشم او اهمیت دارد. مشاهدهگر میتواند دوربین باشد. Ray (پرتو) یک نیمخط نامتناهی است که از نقطهای آغاز و در جهت مشخص تا بینهایت ادامه مییابد. چون نور در خط مستقیم حرکت میکند، میتوان پرتوهایی را تصور کرد که در همه جهتها از منبع نقطهای خارج میشوند. تنها بخشی از این پرتوهای بینهایت در تصویر Film Plane دوربین نقش دارند. اگر منبع از دوربین قابل مشاهده باشد، بعضی پرتوها مستقیماً از منبع و عدسی میگذرند و به Film Plane میرسند. بیشتر پرتوها بدون ورود به دوربین یا برخورد با شیء به بینهایت میروند و در تصویر نقشی ندارند.
شکل ۱.۱۷ — صحنه با یک منبع نور نقطهای.
شکل ۱.۱۸ — برهمکنش پرتوها: پرتو A مستقیماً وارد دوربین میشود؛ B به بینهایت میرود؛ C از آینه بازتاب میشود؛ D از یک کره شفاف عبور میکند.
پرتوهای باقیمانده به اشیا برخورد و آنها را روشن میکنند. برهمکنش با سطح میتواند شکلهای مختلفی داشته باشد. اگر سطح آینه باشد، پرتوی بازتابشده بسته به جهت سطح ممکن است وارد عدسی دوربین شود و در تصویر نقش داشته باشد. بعضی سطحها نور را در همه جهتها پراکنده میکنند. اگر سطح شفاف باشد، پرتو منبع میتواند از آن عبور کند و سپس با شیء دیگری برخورد کند، وارد دوربین شود یا بدون برخورد بعدی به بینهایت برود. شکل ۱.۱۸ تعدادی از این حالتها را نشان میدهد.
Ray Tracing (رهگیری پرتو) و Photon Mapping (نگاشت فوتون) روشهای تشکیل تصویر مبتنی بر همین ایدهها هستند و میتوانند پایه تولید تصویر رایانهای باشند. با رهگیری پرتو میتوان اثرهای فیزیکی را تا هر سطح پیچیدگی شبیهسازی کرد، به شرط آنکه هزینه محاسبات لازم پذیرفته شود. رهگیری پرتو تقریب نزدیکی به جهان فیزیکی میدهد، اما معمولاً برای محاسبات بلادرنگ مناسب نیست.
رویکرد فیزیکی دیگر بر پایستگی انرژی تکیه دارد. مهمترین نمونه در گرافیک رایانهای Radiosity است که برای سطوحی بهترین عملکرد را دارد که نور ورودی را تقریباً بهطور یکسان در همه جهتها پخش میکنند. حتی در این حالت، محاسبات آن بیشتر از چیزی است که معمولاً در زمان واقعی انجام شود. بحث کامل این روشها به فصل ۱۱ موکول میشود.
۱.۴ سامانههای تصویربرداری
اکنون دو سامانه تصویربرداری معرفی میشوند: دوربین سوراخسوزنی و سامانه بینایی انسان. دوربین سوراخسوزنی نمونهای ساده است که سازوکار دوربینها و دیگر تصویرسازهای نوری را قابل فهم میکند و میتوان از آن برای ساخت مدل تشکیل تصویر بهره گرفت. سامانه بینایی انسان بسیار پیچیده است، اما همچنان از اصول فیزیکی سامانههای تصویربرداری نوری پیروی میکند. شناخت ویژگیهای آن کمک میکند از قابلیتهای سامانه گرافیک رایانهای بهتر استفاده کنیم.
۱.۴.۱ دوربین سوراخسوزنی
دوربین سوراخسوزنی شکل ۱.۱۹ نمونهای از تشکیل تصویر با مدل هندسی ساده است. دوربین یک جعبه است که در مرکز یک ضلع آن سوراخ کوچکی وجود دارد و فیلم روی ضلع مقابل درون جعبه قرار میگیرد. فرض کنید دوربین روی محور z قرار گرفته و سوراخ در مبدأ دستگاه مختصات باشد. سوراخ آنقدر کوچک فرض میشود که از هر نقطه فقط یک پرتوی نور وارد شود. صفحه فیلم در فاصله d از سوراخ قرار دارد.
شکل ۱.۱۹ — دوربین سوراخسوزنی: نقطه (x, y, z) و تصویر آن (x_p, y_p, z_p) با فاصله d از سوراخ.
نمای جانبی شکل ۱.۲۰ اجازه میدهد محل تصویر نقطه (x, y, z) را روی صفحه فیلم z = -d محاسبه کنیم. از تشابه دو مثلث داریم:
y_p = - y / (z/d)
و با محاسبه مشابه در نمای بالا:
x_p = - x / (z/d)
نقطه (x_p, y_p, -d) Projection (تصویر/پروجکشن) نقطه (x, y, z) نام دارد. در مدل ایدئال، رنگ Film Plane در این نقطه همان رنگ نقطه اصلی خواهد بود.
Field of View یا زاویه دید دوربین زاویه متناظر با بزرگترین شیئی است که میتواند روی Film Plane تصویر شود. با شکل ۱.۲۱، اگر h ارتفاع دوربین باشد، زاویه دید θ برابر است با:
θ = 2 tan⁻¹(h / 2d)
دوربین سوراخسوزنی ایدئال عمق میدان نامتناهی دارد؛ همه نقاط در محدوده دید در فوکوساند و هر نقطه در این محدوده به نقطهای در پشت دوربین تصویر میشود. بااینحال دو ضعف دارد. نخست، سوراخ بسیار کوچک است و از هر نقطه تنها یک پرتو میپذیرد، بنابراین تقریباً نوری وارد دوربین نمیشود. دوم، تنظیم زاویه دید ممکن نیست.
شکل ۱.۲۰ — نمای جانبی دوربین سوراخسوزنی.
یادداشت ۴: در مسئله سهبعدی بهجای دوبعدی، طول قطر Film میتواند جای h را بگیرد.
شکل ۱.۲۱ — زاویه دید.
گذار از دوربین سوراخسوزنی به دوربین پیشرفتهتر و دیگر سامانههای دارای عدسی ساده است. جایگزینی سوراخ با عدسی هر دو مشکل را حل میکند. نخست، عدسی نور بسیار بیشتری از سوراخ جمع میکند و هرچه Aperture (دهانه) بزرگتر باشد نور بیشتری وارد میشود. دوم، با انتخاب Focal Length (فاصله کانونی) مناسب—معادل انتخاب d در دوربین سوراخسوزنی—میتوان تقریباً هر زاویه دید دلخواه تا حدود ۱۸۰ درجه ایجاد کرد. البته عدسی عمق میدان نامتناهی ندارد و همه فاصلهها همزمان در فوکوس نیستند.
برای هدف این فصل میتوان همان دوربین سوراخسوزنی را به کار برد که فاصله کانونی آن فاصله d از جلوی دوربین تا Film Plane است. مانند این دوربین، در گرافیک رایانهای نیز معمولاً همه اشیا در فوکوس تولید میشوند.
۱.۴.۲ سامانه بینایی انسان
سامانه بینایی بسیار پیچیده انسان همه اجزای یک سامانه تصویربرداری فیزیکی مانند دوربین یا میکروسکوپ را دارد. اجزای اصلی در شکل ۱.۲۲ نشان داده شدهاند. نور از عدسی و Cornea (قرنیه)، ساختار شفاف محافظ چشم، وارد میشود. Iris (عنبیه) باز و بسته میشود تا مقدار نور ورودی تنظیم گردد. عدسی تصویری را روی Retina (شبکیه)، ساختار دوبعدی پشت چشم، تشکیل میدهد. Rodها و Coneها که بهسبب شکل ظاهریشان چنین نامیده میشوند حسگرهای نوری روی شبکیهاند و با انرژی الکترومغناطیسی در محدوده تقریباً ۳۵۰ تا ۷۸۰ نانومتر تحریک میشوند.
Rodها حسگر نور کماند و دید شبانه را فراهم میکنند، اما حساسیت رنگی ندارند. Coneها مسئول دید رنگی هستند. اندازه این حسگرها همراه خواص نوری عدسی و قرنیه Resolution یا Visual Acuity (حدت بینایی) را تعیین میکند. تفکیکپذیری معیاری برای کوچکترین اشیای قابل دیدن است؛ دقیقتر، نشان میدهد دو نقطه تا چه حد میتوانند به هم نزدیک شوند و هنوز بهصورت دو نقطه مستقل تشخیص داده شوند.
حسگرهای چشم به طول موجهای مختلف پاسخ یکسانی ندارند. سه نوع Cone و یک نوع Rod وجود دارد. Intensity یک کمیت فیزیکی انرژی نور است، درحالیکه Brightness معیاری ادراکی از شدت دیدهشده است؛ ادامه این بحث در بخش بعدی کتاب آمده است.
شکل ۱.۲۲ — سامانه بینایی انسان: قرنیه، شبکیه، عدسی، عنبیه، Rodها، Coneها و عصب بینایی.