مجموعه آموزشی پی استور - https://programstore.ir

آموزش برنامه نویسی Opengl در ++Virtual C

در این مقاله قصد داریم به آموزش برنامه نویسی Opengl در ++Virtual C بپردازیم. OpenGL مخفف کلمات Open source Graphic Library است و یک زبان برنامه برنامه نویسی نیست بلکه یک کتابخانه متن باز است که می توان از آن در زبان های برنامه نویسی استفاده کرد. در واقع توابع کتابخانه ای متنوعی در OpenGL وجود دارد که می توان از آن در هر زبان برنامه نویسی استفاده کرد. در این آموزش هدف ما استفاده از این کتابخانه در ++Virtual C است. پس با ادامه آموزش با ما همراه باشید.

مقدمه

در ابتدا با نام OpenGL شروع می کنیم که همانطور که گفته شد مخفف Open source Graphic Library است. حتماً با نرم افزار های متن باز یا Open Source آشنا هستید. این نرم افزار ها به صورت رایگان در اختیار عموم قرار می گیرند و تهیه کننده گان آنها سورس اصلی برنامه را بیشتر به منظور عیب یابی و کاهش خطا ها و احتمالی برنامه در اختیار برنامه نویسان قرار می دهند تا برنامه نویسان و علاقمندان بتوانند به راحتی کد آن برنامه را ویرایش کنند.

OpenGL جزء نرم افزار متن باز به شمار می رود و graphic library یا همان کتابخانه گرافیکی به مجموعه کتابخانه ها یا کامپوننت های گفته می شود که برای استفاده از دستورات مخصوص گرافیکی تهیه شده است و با اضافه کردن بوسیله include از آن ها در برنامه اصلی استفاده می کنیم.

کتابخانه ها یا همان فایل های با پسوند lib که مخفف library می باشند به منظور آسان تر شدن کار برنامه نویسان در موقع برنامه نویسی ایجاد و تهیه می شوند، به این صورت که مثلاً برنامه نویسی داخل برنامه های خود از تابع خاصی چندین بار به صورت متوالی استفاده می کند، خوب نوشتن این تابع خاص به این تعداد در کد اصلی برنامه حجم فایل نهایی را بالا برده و البته وقت برنامه نویس را هم خواهد گرفت، اینجاست که کتابخانه ها یا lib ها وارد عمل می شوند و تابع خاص را داخل خود قرار می دهند تا موقع نیاز به تابع از آن استفاده شود.

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

آموزش برنامه نویسی Opengl در ++Virtual C

تاریخچه OpenGl

برای آموزش برنامه نویسی Opengl بهتر است تاریخچه ای در مورد اوپن جی ال بدانیم. سازنده OpenGL [2] یا بهتر بگوییم توسعه دهنده و بهینه کننده آن شرکت Graphics Silicon است. خود OpenGL توسعه یافته کتابخانه دو بعدی IRISGL که آن هم محصول شرکت SGL بود، می باشد . شرکت های دیگری نیز به توسعه این محصول متن باز کمک کرده اند از جمله شرکت Labs3 D که تکنیک و قابلیت سایه زنی را به OpenGL اضافه نمود.

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

پروژه اتاق سه بعدی با در و پنجره و میز و قوری در OpenGl [3]

پروژه اتاق سه بعدی با در و پنجره و میز و قوری در OpenGl

در این بخش سورس کد آماده پروژه اتاق سه بعدی در OpenGl قرار داده شده است. این پروژه با زبان برنامه نویسی سی پلاس پلاس و با استفاده از توابع کتابخانه ای opengl طراحی شده است و مناسب برای درس گرافیک کامپیوتری می باشد.

انواع گرافیک کامپیوتری

قبل از برنامه نویسی Opengl در ++Virtual C بایستی اطلاعاتی در مورد انواع گرافیک کامپیوتری داشته باشید. به طور کلی دو نوع گرافیک کامپیوتری وجود دارد: نوع اول گرافیک رستری Raster است که به گرافیک Bitmap نیز مشهور است. البته گاهی اوقات به گرافیک رستری گرافیک پیکسلی نیز می گویند و نوع دوم آن گرافیک وکتور Vector یا برداری می باشد. که در ادامه به تشریح هر کدام برای برنامه نویسی openGl می پردازیم.

1- گرافیک پیکسلی یا رستری

این نوع گرافیک از خانه های پیکسلی که دارای درجه مشخصی از یک رنگ می باشند تشکیل شده است و وقتی این پیکسل ها در کنار یکدیگر با درجه رنگ‌هایی مختلف از هم، قرار می‌گیرند، تصاویر را تشکیل می دهند. در گرافیک پیکسلی به دلیل اینکه شما با رنگ پیکسل ها سرو کار دارید، قادر به ویرایش، حذف یا ایجاد تصویر یا عکس نیستید. تنها می توانید عکس یا تصاویر دیجیتال را توسط دسترسی به پیکسل‌هاس رنگی آن، ویرایش نمایید.

آنچه در گرافیک رستری اهمیت دارد، تعداد پیکسل های رنگی در اینچ می‌باشد، زیرا این تعداد، کیفیت رنگی و وضوع تصویری عکس دیجیتال را مشخص می کند. به تعداد پیکسل های رنگی در اینچ، رزولوشن می گویند و مقدار رزولوشن، همان مقدار پیکسل ها را در واحد اینچ مشخص می کند که اصطلاحاً به آن واحد dpi می گویند (Dot Per Inch).

همین dpi است که باعث می شود وقتی شما یک تصویر رستری را بزرگ نمایی می کنید، کیفیت تصویر پایین تر می آید. زیرا هرچه هم که آنرا بزرگ تر کنید نمی توانید رزولوشن یا تعداد پیکسل های آن را در واحد اینچ افزایش دهید. کیفیت این تصاویر با سایز ارتباط مستقیم دارد.

2- گرافیک وکتور یا برداری

این نوع گرافیک، گرافیکی رایانه ای است که با فرمولهای ریاضی سر و کار دارد. از خط ها، منحنی ها و اشکالی که دارای بعد و مختصات ریاضی می باشند و مکان آنها با X و Y تعریف می گردد. دارای طول و عرض ریاضی می باشند و رزولوشن آنها با تغییر سایز، تغییر نمی یابد. بنابراین کیفیت تصاویر در هر سایزی یکسان می ماند و این کار از طریق محاسبات ریاضی انجام می شود. این گرافیک یکی از بهترین و پرکاربردترین انواع گرافیک کامپیوتری است، برای کار تصویر سازی استفاده می شود و طراحی آرم ها و گاهی تصویر سازی کتاب های کودک و … توسط برنامه های وکتوری انجام می شود.

 

مقایسه گرافیک رستری با برداری در گرافیک کامپیوتری

پروژه ساعت دیواری در OpenGl [4]

پروژه ساعت دیواری در OpenGl

در این بخش سورس کد آماده پروژه ساعت دیواری در OpenGl قرار داده شده است. این پروژه با زبان برنامه نویسی سی پلاس پلاس و با استفاده از توابع کتابخانه ای opengl و تحت محیط کامپایلر visual studio طراحی شده است و پروژه ای مناسب برای درس گرافیک کامپیوتری می باشد.

قوانین برنامه نویسی OpenGL

ساختار تابع در opengl

انواع داده ها در برنامه نویسی OpenGL

پسوندنوع دادهمعادل نوع داده در زبان Cتعریف نوع در OpenGl
b8 بیت integersinged charGlbyte
s16 بیت integershortGlshort
i32 بیت integerint or longGlint, Glsizei
f32 بیت ممیز شناورfloatGlfloat, Glclampf
d64 بیت ممیز شناورdoubleGldouble, Glclampd
ub8 بیت integer بدون علامتunsigned charGlubyte, Glboolean
us16 بیت integer بدون علامتunsigned shortGlushort
ui32 بیت integer بدون علامتunsigned int or longGluint,glenum,Glbitfleld

قالب کلی برنامه نویسی OpenGl

#include <GL/glut.h>
.
.
.
تعریف متغییرها و ثوابت
Void init()
{
مقداردهی اولیه
}
تعریف سایر توابع در صورت نیاز//
int main(int argc,char **argv)
{
فراخوانی توابع رسم و ارسال پارامتر ورودی به توابع//
Init();
glutMainLoop();
return 0;
}

آموزش تصویری نصب OpenGL در ویژوال استادیو