آموزش OpenGL

مباحث پایه OpenGL

روشنایی در OpenGL

بارگذاری مدل در OpenGL

مباحث پیشرفته OpenGL

روشنایی پیشرفته در OpenGL

رندر مبتنی بر فیزیکی در OpenGL

مثال های کاربردی OpenGL

شروع OpenGL – آموزش OpenGL

  • سه شنبه ۲۳ مرداد ۱۳۹۷
  • بازدید ۵۰۵ نفر

opengl get started 3214 تصویر

شروع OpenGL

قبل از شروع یادگیری ابتدا باید مشخص کنیم که OpenGL چیست. در واقع OpenGL یک API (رابط برنامه نویسی کاربردی) است که تعداد زیادی از توابع را در اختیار ما قرار می دهد تا با استفاده از آن بتوانیم گرافیک ها و تصاویر را دستکاری کنیم.

معمولا سازندگان کارت های گرافیک، کتابخانه های OpenGL را توسعه می دهند. هر کارت گرافیکی که خریداری می کنید، نسخه های خاصی از OpenGL را که برای آن سری از کارت گرافیک طراحی شده است را پشتیبانی می کند. بنابراین هرگاه OpenGL رفتارهای عجیب و غریبی را نشان دهد، احتمالا ناشی از خطاهایی است که سازندگان کارت گرافیک (توسعه دهندگان کتابخانه های OpenGL) داشته اند.

هز زمان که مشکلی در اجرای کارت گرافیک وجود داشته باشد، معمولا سازندگان آن با ارائه به روز رسانی مشکل را حل می کنند. این به روز رسانی شامل جدیدترین نسخه های OpenGL می باشد که کارت گرافیک شما پشتیبانی می کند. یکی از دلایلی که همیشه توصیه می شود درایو کارت گرافیک خود را به روز رسانی کنید، همین موضوع است.

Core-profile در مقابل Immediate mode

در گذشته، استفاده از OpenGL به صورت توسعه در حالت immediate mode بود که یک روش آن برای استفاده از گرافیک به شمار می رفت. اکثر قابلیت های OpenGL در کتابخانه پنهان شده بودند و توسعه دهندگان آزادی زیادی در چگونگی انجام محاسبات نداشتند. در نهایت توسعه دهندگان به انعطاف پذیری بیشتر نیاز پیاده کردند و در طول زمان ویژگی های OpenGL انعطاف پذیر تر شد. Immediate mode برای درک و استفاده بسیار آسان می باشد، اما بسیار ناکارآمد است. به همین دلیل توسعه دهندگان به سمت Core-profile مهاجرات کردند.

استفاده از Core-Profile توسعه دهنده را مجبور به استفاده از شیوه های مدرن می کند. زمانی که از یک تابع ضعیف OpenGL استفاده می کنیم، OpenGL یک خطا می دهد و ادامه کار را متوقف می سازد. رویکرد Core-Profile انعطاف پذیری و کارآمدی بالایی دارد اما متاسفانه برای یادگیری دشوار است. رویکرد مدرن مستلزم این است که برنامه نویس، واقعا برنامه نویسی OpenGL و گرافیک را درک کند. بنابر موارد گفته شده، در این آموزش ما از Core-Profile OpenGL 3.3 استفاده خواهیم کرد.

امروزه نسخه های جدیدتری از OpenGL منتشر شده است و ممکن است بپرسید: چرا از نسخه ۳٫۳ برای آموزش استفاده می کنیم؟ پاسخ به این سوال نسبتا ساده است. نسخه ۳٫۳، نسخه پایه تمام نسخه های جدیدتر OpenGL است ویژگی های جدید بدون تغییر در مکانیزم نسخه اصلی به آن اضافه شده اند. نسخه های جدیدتر فقط راه های کارآمد و مفیدتری را برای انجام وظایف مشابه معرفی می کنند. از این رو شما با یادگیری OpenGL اصلی، به راحتی می توانید نسخه های جدیدتر آن را نیز یاد بگیرید.

توجه!: هنگام استفاده از قابلیت های جدیدترین نسخه OpenGL، تنها کارت های گرافیکی مدرن قادر به اجرای برنامه شما خواهند بود و یکی از دلایلی که باعث می شود توسعه دهندگان از نسخه های پایین تر OpenGL استفاده کنند، همین موضوع است.

افزونه ها (Extensions)

یکی از ویژگی های عالی OpenGL پشتیبانی آن از افزونه ها می باشد. شرکت های گرافیک تکنیک جدید یا یک بهینه سازی بزرگ برای خود را به صورت Extensions ارائه می کنند. اگر سخت افزاری که برنامه گرافیکی بر روی آن اجرا می شود، از افزونه های گرافیکی پشتیبانی کند، توسعه دهندگان می توانند با استفاده از آن ها برنامه های کارآمدتری ایجاد کنند.

توسعه دهندگان باید بدانند که کدام افزونه ها در دسترس می باشند. این موضوع به آن ها کمک می کند تا بتوانند کارها را بهتر و کارآمدتر انجام دهند. مثال زیر بررسی می کند که آیا یک افزونه در دسترس است یا خیر:

اگر از نسخه OpenGL 3.3 استفاده کنید، به ندرت پیش می آید که بخواهید از افزونه ها استفاده کنید، اما هر کجا که لازم باشد دستورالعمل های مناسب ارائه می شود.

ماشین حالت (State Machine)

OpenGL به خودی خود یک ماشین حالت بزرگ است: مجموعه ای از متغیرهایی که چگونگی کار کرد OpenGL را تعریف می کنند. حالت OpenGL معمولا به عنوان OpenGL Context نامیده می شود. هنگام استفاده از OpenGL، حالت خود را با تنظیم برخی از گزینه، دستکاری برخی بافرها و غیره تغییر می دهیم.

هنگامی که با OpenGL کار می کنیم، چندین تابع تغییر حالت را در اختیار داریم که زمینه را تغییر می دهند و چندین تابع دیگر که بر اساس حالت فعلی OpenGL برخی از عملیات ها را انجام می دهند.

اشیاء (Objects)

کتابخانه های OpenGL با استفاده از زبان برنامه نویسی C نوشته شده اند و می توانند در زبان های دیگر مشتق شوند، اما در هسته آن یک کتابخانه C باقی می ماند. از آن جا که بسیاری از ساختارهای زبان C به خوبی به زبان های سطح بالا ترجمه نشده است، OpenGL با چندین تفاوت طراحی شده است که یکی از آن ها اشیاء (Objects) در OpenGL می باشد.

یک شیء در OpenGL مجموعه ای از گزینه هایی می باشد که یک زیر مجموعه از حالت OpenGL را نشان می دهند. به عنوان مثال با می توانیم یک شیء داشته باشیم که تنظیمات پنجره کشیده شده را نشان دهد.  همچنین می توانیم اندازه، رنگ و غیره را نیز تنظیم کنیم. می توان یک شیء را مانند یک ساختار (struct) در زبان C تصور کرد:

به طور کلی نحوه استفاده از اشیاء، چیزی شبیه به این است:

این تکه کد، یک جریان کاری است که اغلب در هنگام کار با OpenGL مشاهده خواهید کرد. ما در ابتدا یک شیء ایجاد و یک ارجاع به آن را به عنوان شناسه (objectId) ذخیره می کنیم (اطلاعات شیء واقعی در پشت صحنه ذخیره می شود). سپس شیء را به محل هدف متصل می کنیم (در مثال بالا محل هدف به عنوان GL_WINDOW_TARGET تعریف شده است). بعد از آن Option های مربوط به GL_WINDOW_TARGET را تنظیم می کنیم و در نهایت با تنظیم پارامتر objectId هدف بر روی صفر، آن را به حالت پیشفرض بر میگردانیم.

ثبت نظر
ریفریش کنید!
نظرات کاربران (۰ مورد)

هیچ نظری ثبت نشده است