آموزش اوپن جی ال (OpenGL)

دسته بندی: آموزش ساخت بازی

آموزش اوپن جی ال

آنچه در این صفحه می خوانید:

معرفی اوپن جی ال (OpenGL)

Open Graphics Library به اختصار OpenGL، رابط برنامه استاندارد (API) صنعت کامپیوتر برای تعریف تصاویر 2 بعدی و3 بعدی است. پیش از OpenGL، هر شرکتی که برنامه کاربردی گرافیکی را توسعه می داد، به طور معمول مجبور بود قسمت گرافیکی آن را برای هر پلتفرم سیستم عامل بازنویسی کند و باید از سخت افزار گرافیکی نیز آگاهی می داشت. با استفاده از OpenGL، یک برنامه می تواند اثرات مشابهی را در هر سیستم عاملی با استفاده از هر آداپتور گرافیکی OpenGL ایجاد کند.

OpenGL مجموعه ای از دستورات یا عملکرد هایی که بلافاصله اجرا شدند را مشخص می کند. هر دستور منجر به یک عمل رسم یا باعث ایجاد جلوه های ویژه می شود. لیستی از این دستورات را می توان برای اثرات تکراری ایجاد کرد. OpenGL مستقل از ويژگي هاي هر سيستم عامل است، اما روال هاي خاصی را براي هر سيستم عاملي که OpenGL را قادر مي سازد تا در محيط ويندوز آن سيستم کار کند، فراهم مي کند. OpenGL همراه با تعداد زیادی از توانایی های داخلی ساخته شده توسط API می باشد. این ها شامل حذف سطح پنهان، ترکیب آلفا (شفافیت)، ضد تابش، نقشه برداری بافت، عملیات پیکسل، مشاهده و مدل سازی تغییرات و اثرات اتمسفری (مه، دود و مه) است. سیلیکون گرافیک، سازنده ی workstations گرافیکی پیشرفته، توسعه OpenGL را آغاز کرد.

شرکت های دیگری که در مجتمع صنعت معماری در نظر گرفته اند عبارتند از: DEC، اینتل، آی بی ام، مایکروسافت و سان مایکروسیستمز. هیچ هزینه ای (به غیر از یادگیری) برای توسعه یک برنامه با استفاده از API OpenGL وجود ندارد. مایکروسافت به طور رایگان کتابخانه های OpenGL را برای سیستم های ویندوز خود ارائه می دهد.

تاریخچه اوپن جی ال (OpenGL)

در دهه 1980، توسعه نرم افزاری که می توانست با طیف گسترده ای از سخت افزارهای گرافیکی کار کند، یک چالش واقعی بود. توسعه دهندگان نرم افزار برای هر قطعه سخت افزار رابط و درایورهای سفارشی را نوشتند. این گران بود و منجر به ضرب تلاش شد.

در اوایل دهه 1990، Silicon Graphics رهبر گرافیک سه بعدی برای workstations بود. IRIS GL API آن ها از مدرنترین محصولات درنظر گرفته شده و تبدیل به استاندارد صنعت فاضلاب است و از PHIGS مبتنی بر استانداردهای باز استفاده می کند. این امر به این دلیل است که استفاده از IRIS GL و به دلیل پشتیبانی سریع از رندر حالت آسان تر به حساب می آید. در مقابل، استفاده از PHIGS دشوار و از نظر عملکرد منسوخ به نظر می رسید.

رقبای SGI از جمله (Sun Microsystems، Hewlett-Packard و IBM) همچنین توانستند سخت افزارهای سه بعدی پشتیبانی شده توسط پسوندهای ساخته شده در استاندارد PHIGS را به بازار عرضه کنند، این امر فشار SGI را بر روی اوپن سورس نسخه ای از IrisGL به عنوان یک استاندارد عمومی به نام OpenGL ارائه داد.

طراحی اوپن جی ال (OpenGL)

طراحی اوپن جی ال

مشخصات OpenGL یک API انتزاعی را برای ترسیم گرافیک 2D و 3D توصیف می کند. اگرچه این امکان وجود دارد که API کاملاً در نرم افزار پیاده سازی شود، اما به گونه ای طراحی شده است که عمدتاً یا به طور کامل در سخت افزار پیاده سازی شود.

API به عنوان مجموعه ای از توابع تعریف شده است که ممکن است توسط برنامه کلاینت، در کنار مجموعه ای از ثابت های عدد صحیح نامگذاری شده (به عنوان مثال، ثابت GL_TEXTURE_2D، که با عدد اعشاری 3553 مطابقت دارد) تعریف شود. اگرچه تعاریف عملکرد به طور سطحی شبیه به زبان برنامه نویسی C است، اما از نظر زبان مستقل هستند. به همین ترتیب، OpenGL دارای بسیاری از زبان هاست، که یکی از مهمترین آن ها WebGL اتصال JavaScript (API، مبتنی بر OpenGL ES 2.0، برای رندر سه بعدی از درون یک مرورگر وب).

علاوه بر اینکه مستقل از زبان است، OpenGL کراس پلتفرم نیز هست. مشخصات می گوید هیچ چیز در مورد به دست آوردن، و مدیریت یک زمینه OpenGL نیست، و این جزئیاتی از سیستم پنجره زیرین است. به همین دلیل، OpenGL کاملاً نگران رندر کردن است و هیچ API مربوط به ورودی، صدا یا تصویر را ارائه نمی دهد.

توسعه

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

علاوه بر ویژگی های مورد نیاز API هسته ای، فروشندگان واحد پردازش گرافیک (GPU) ممکن است عملکرد دیگری را در قالب پسوندها ارائه دهند. پلاگین ها ممکن است توابع جدید و ثابت های جدید را معرفی کرده و محدودیت هایی را در عملکردهای OpenGL موجود ایجاد کنند. فروشندگان می توانند بدون نیاز به پشتیبانی سایر فروشندگان یا گروه Khronos، از افزونه ها برای افشای API های سفارشی استفاده کنند و این باعث افزایش انعطاف پذیری OpenGL می شود. همه برنامه های افزودنی توسط ثبت نام OpenGL جمع آوری و تعریف می شوند.

هر افزونه بر اساس نام شرکتی که آن را ایجاد کرده است با یک شناسه کوتاه همراه است. به عنوان مثال، شناسه Nvidia NV است، که بخشی از نام پلاگین GL_NV_half_float، ثابت GL_HALF_FLOAT_NV، و عملکرد ()glVertex2hNV است. اگر چندین فروشنده موافقت خود را با استفاده از همان API عملیاتی کنند، ممکن است با استفاده از شناسه EXT، یک پلاگین مشترک منتشر شود. در چنین مواردی نیز ممکن است اتفاق بیفتد که شورای بررسی معماری گروه Khronos تصویب صریح خود را صادر می کند، در این صورت از شناسه ARB استفاده می شود.

ویژگی های معرفی شده توسط هر نسخه جدید OpenGL به طور معمول از ویژگی های ترکیبی از چندین پسوند بطور گسترده اجرا شده، به ویژه پسوندهای نوع ARB یا EXT تشکیل شده است.

ویژگی های اوپن جی ال (OpenGL)

  • OpenGL یک استاندارد صنعتی است. با راهنمایی یک کنسرسیوم مستقل، هیئت مدیره بررسی معماری OpenGL بر مشخصات OpenGL نظارت می کند و این تنها استاندارد گرافیکی واقعاً باز، بی طرف و بی نظیر است.
  • OpenGL برای بیش از هفت سال در میان انواع مختلف سیستم عامل پایدار بوده است. موارد اضافی در مشخصات به خوبی کنترل می شوند و به روزرسانی های پیشنهادی به موقع اعلام می شود که توسعه دهندگان بتوانند تغییرات را اعمال کنند. الزامات سازگاری به عقب تضمین می کند که برنامه های موجود منسوخ نشوند.
  • برنامه های OpenGL قابلیت اطمینان را دارند و نتایج نمایش بصری سازگار را در هر سخت افزار سازگار با API OpenGL، بدون در نظر گرفتن سیستم عامل یا سیستم پنجره، ارائه می دهند.
  • برنامه ها و خدمات OpenGL را می توان از زبان های مختلف فراخوانی کرد.
  • OpenGL استقلال کاملی از پروتکل های شبکه و توپولوژی ها ارائه می دهد.
  • OpenGL مقیاس پذیری را با برنامه هایی که می توانند در سیستم های در حال اجرا از وسایل الکترونیکی مصرفی به رایانه های شخصی، workstations و ابر رایانه ها اجرا کنند، ارائه می دهد. در نتیجه، برنامه های کاربردی می توانند در هر طبقه از دستگاهی که توسعه دهنده برای هدف گیری انتخاب کرده است، مقیاس گذاری کنند.

اوپن جی ال (OpenGL) در پایتون

ما باید از داخل پایتون به کتابخانه OpenGL دسترسی پیدا کنیم و عمدتاً دو راه حل در اختیار داریم. یا از اتصالات خالص استفاده می کنیم و باید همه چیز را برنامه ریزی کنیم یا از موتور استفاده می کنیم که بسیاری از کارکردهای مناسب را فراهم می کند و توسعه را آسان می کند. ابتدا از پیوندهای PyOpenGL قبل از استفاده از كتابخانه های پر زرق و برق استفاده كنید كه ادغام محكمی را با numpy ارائه می دهد.

Bindings

  • Pyglet یک فریمورک کاربردی کراس پلتفرم پایتون خالص است که برای توسعه بازی در نظر گرفته شده است. این پشتیبانی از پنجره، دستیابی به رویداد رابط کاربر، گرافیک OpenGL، بارگیری تصاویر و فیلم ها و پخش صدا و موسیقی است. این در ویندوز، OS X و Linux کار می کند.
  • PyOpenGL رایج ترین متقابل Python متصل به OpenGL و API های مرتبط است. این اتصال با استفاده از كتابخانه استاندارد ctypes ایجاد می شود و تحت لیسانس اوپن سورس به سبک BSD بسیار لیبرال ارائه می شود.
  • ModernGL بسته بندی شده ای از OpenGL است که ایجاد برنامه های گرافیکی ساده مانند شبیه سازی های علمی، بازی های کوچک یا رابط های کاربر را ساده می کند. معمولاً کسب دانش عمیق از OpenGL به یک منحنی یادگیری شیب دار نیاز دارد. در مقابل، ModernGL برای یادگیری و استفاده آسان است، علاوه بر این قادر به ارائه با همان عملکرد و کیفیت مشابه است و کد کمتری نیز در آن نوشته شده است.
  • Ctypes Bindings همچنین به لطف پرونده gl.xml که توسط گروه Khronos ارائه شده است و OpenGL و OpenGL API Registry را تعریف می کند، می توان به راحتی تولید کرد. تعداد توابع و ثابت های ذکر شده در جدول فوق با استفاده از برنامه code / Chapter-02 / Register.py محاسبه شده است که پرونده gl.xml را برای هر API و نسخه تجزیه می کند و ویژگی های مربوط را محاسبه می کند.

Engines

  • مجموعه ابزار ویژوالیزاسیون (VTK) یک سیستم نرم افزاری اوپن سورس و رایگان است که برای گرافیک های رایانه ای سه بعدی، پردازش تصویر و ویژوال سازی در دسترس است. این کتابخانه شامل یک کتابخانه کلاس ++C و چندین لایه رابط تفسیر شده از جمله Tcl / Tk، Java و Python است.
  • پردازش یک زبان برنامه نویسی، محیط توسعه و جامعه آنلاین است. از سال 2001، پردازش سواد نرم افزاری را در هنرهای تجسمی و سواد تجسمی در فناوری ارتقا داده است. امروز ده ها هزار دانش آموز، هنرمند، طراح، محقق و سرگرمی وجود دارند که از پردازش برای یادگیری، نمونه سازی و تولید استفاده می کنند.
  • NodeBox for OpenGL یک کتابخانه کراس پلتفرم رایگان برای تولید انیمیشن های 2D با کد برنامه نویسی پایتون است. این برنامه بر روی Pyglet ساخته شده است و API ترسیم را از NodeBox برای Mac OS X به تصویب می رساند. این پشتیبانی از مسیرها، لایه ها، حرکت، جلوه های تصویری شتاب دهنده سخت افزاری، فیزیک ساده و تعامل را دارد.
  • Panda3D یک موتور سه بعدی است، کتابخانه ای از برنامه های فرعی برای رندر سه بعدی و توسعه بازی. این کتابخانه ++C با مجموعه ای از اتصالات پایتون است. توسعه بازی با Panda3D معمولاً شامل نوشتن یک برنامه Python یا ++C است که کتابخانه Panda3D را کنترل می کند.
  • VPython ایجاد نمایشگرها و انیمیشن های سه بعدی قابل پیمایش را آسان می کند، حتی برای افرادی که تجربه برنامه نویسی محدود دارند. از آنجا که مبتنی بر پایتون است، برای برنامه نویسان و محققان با تجربه نیز پیشنهادات زیادی دارد.

Libraries

توجه داشته باشید که حتی اگر glumpy و vispy یکسری مفاهیم را به اشتراک بگذارند، اما متفاوت هستند vispy رابط سطح بالایی را ارائه می دهد که ممکن است در بعضی شرایط راحت باشد اما این تمایل به مخفی کردن تجهیزات داخلی دارد. این یکی از دلایلی است که می خواهیم به جای آن از glumpy استفاده کنیم.

  • Glumpy یک کتابخانه پایتون برای ویژوال سازی علمی است که هم سریع، هم مقیاس پذیر و زیبا است. Glumpy قدرت محاسباتی واحدهای مدرن پردازش گرافیک (GPU) را از طریق کتابخانه OpenGL به نمایش می گذارد تا مجموعه داده های بسیار بزرگی را نشان دهد و رابط بصری بین numpy و OpenGL مدرن را ارائه می دهد.
  • Vispy پروژه خواهر Glumpy است. این یک کتابخانه ویژوال سازی 2D / 3D با کارایی بالا است و دارای یک رابط سطح بالا برای ویژوال سازی علمی است. تفاوت بین numpy و scipy تقریباً برابر است با تفاوت بین glumpy و vice-versa حتی اگر Vispy مستقل باشد.

اوپن جی ال (OpenGL) در جاوا

JOGL مناسب یک برنامه نویس جاوا است که می خواهد OpenGL را بیاموزد، اگر دنبال برخی از کتاب های مقدماتی OpenGL یا مقاله باشید، بسیار مفید است. اگر بیشتر علاقه مند به نوشتن بازی های جاوا هستید، باید یک کتابخانه دوستانه برای بازی مانند LWJGL یا حتی بهتر از آن، libGDX را بررسی کنید.

آیا این نوشته را دوست داشتید؟
linkedin-c-game-programming-1

آموزش برنامه نویسی بازی با ++C قسمت 1


مقدمه ای به دنیای برنامه نویسی بازی با ++C داشته باشید. این دوره اصول اولیه توسعه بازی را با ++C و کتابخانه چندرسانه ای ساده و سریع OpenGL (SFML)، با ...

1399/01/14 690 بازدید
packtpub-opengl-and-glsl-fundamentals-with-c-practical-course

آموزش اصول OpenGL و GLSL با سی پلاس پلاس


این دوره به شما کمک می کند تا مدل های ذهنی مناسبی از مفاهیم و فرآیندهای اساسی OpenGL و 3D math بسازید. در این دوره برنامه نویسی سی پلاس پلاس را به صور...

1398/08/03 1508 بازدید
udemy-computer-graphics-with-modern-opengl-and-c-udemy

آموزش گرافیک کامپیوتری با OpenGL مدرن و ++C


این دوره می تواند برای هر توسعه دهندگان گرافیک و یا بازی بسیار مهم باشد. این دوره طراحی شده است که به شما OpenGL مدرن و تکنیک های گرافیکی را بدون هیچ ...

1397/06/30 4654 بازدید زیرنویس دارد
آموزش-کار-با-opengl

آموزش کار با OpenGL


در این آموزش تصویری با نحوه راه اندازی و کار با OpenGL آشنا می شوید. این دوره آموزشی محصول موسسه Lynda می باشد. سرفصل های دوره: راه اندازی OpenGL...

1396/01/24 3831 بازدید
آموزش-opengl

آموزش OpenGL


OpenGL یک کتابخانه گرافیکی قدرتمند برای خلق گرافیک رایانه ای (ساخت انیمیشن، بازی و ...) می باشد. در این دوره آموزشی از موسسه LiveLessons با اصول Open...

1395/01/15 10346 بازدید
دوره-آموزش-3dbuzz-opengl-depth

دوره آموزش 3DBuzz - OpenGL In Depth


OpenGL یک کتابخانه متن باز گرافیکی است که به کمک آن می توانید انواع شی های گرافیکی سه بعدی رسم کنید. این کتابخانه در ساخت انیمیشن و بازی های گرافیک...

1394/12/27 3479 بازدید
ملزومات-توسعه-اپلیکیشن-های-android

ملزومات توسعه اپلیکیشن های Android


در این آموزش تصویری با اصول برنامه نویسی Android آشنا می شوید. این دوره آموزشی محصول Livelessons می باشد. سرفصل های دوره آموزشی: اهداف آموزش را...

1394/12/27 6009 بازدید