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

آموزش opengl با c++ سی پلاس پلاس — جامع و کاربردی

قبل از آغاز آموزش opengl با c++ باید بگویم، به‌عنوان یک برنامه‌نویس که در عصر حاضر زندگی می‌کنم، برنامه‌هایی که منجر به ایجاد یک محیط گرافیکی به‌صورت فیلم می‌شوند و هیجان همه را برمی‌انگیزند را ترجیح می‌دهم. آموزش opengl با c++ یکی از راه‌های ایجاد چنین محیط‌هاست، که طرفداران زیادی دارد. پس اگر به برنامه‌نویسی هیجان‌انگیز علاقه‌مند هستید و قصد دارید آن را بیاموزید با آموزش opengl با c++ همراه ما باشید.

مقدمه

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

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

opengl چیست؟

opengl مخفف Open Source Graphic Library به معنای کتابخانه گرافیکی متن‌باز می‌باشد که توسط شرکت آمریکایی Silicon Graphic [2] ارائه‌شده است. opengl یک کتابخانه رایج برای تولید و کد نویسی نرم‌افزارهای گرافیکی است، بیشترین کاربرد آن در ساخت بازی‌های کامپیوتری می‌باشد.

باگذشت زمان، رفته‌رفته برنامه‌نویسی جنبه گرافیکی به خود گرفته است و خروجی اکثر دستورات برنامه‌نویسی در زبان‌های مختلف به‌صورت گرافیکی و انیمیشن می‌باشد. در برنامه‌نویسی مدرن، امکاناتی مانند حجم دادن به اشیاء، حرکت کنترل‌شده در تمامی جهت‌ها با مختصات گوناگون، ایجاد نور و روشنایی و غیره وجود دارد.

opengl چیست؟

پیش‌نیاز آموزش opengl با c++ این است که در‌زمینه برنامه‌نویسی گرافیکی مهارت داشته باشید. این کتابخانه برای زبان‌های مختلفی مثل c#، جاوا، پایتون و غیره‌قابل استفاده است که ما در پست آموزش opengl با c++ این کتابخانه را در c++ بررسی می‌کنیم.

یکی از مزایای بسیار مهم opengl این است که به برنامه‌نویسی گرافیکی سرعت و کیفیت بالایی می‌دهد. در حالت عادی برنامه‌نویسی گرافیکی سرعت و کیفیت قابل قبولی ندارد. این کتابخانه بدون هیچ مشکلی و بسیار ساده و آسان روی سیستم عامل‌های مختلف نصب می‌شود.

برای اجرای برنامه های opengL با استفاده از c++، به فایل‌ها و کتابخانه‌های هدر opengl نیاز دارید که برخی از کتابخانه‌های رایج opengl عبارت انداز:

1. Core OpenGL (GL): این کتابخانه صدها تابع دارد که پیشوند آنها با “gl” است مثل: glColor، glVertex، glTranslate، glRotat. کتابخانه Core OpenGL یک شئ را از طریق مجموعه‌ای از موارد اولیه هندسی مانند نقطه، خط و چندضلعی مدل می‌کند.

2. Open Utility Library (GLU): این کتابخانه بر روی هسته OpenGL برای ارائه ابزارهای مهم و مدل‌های ساختمانی بیشتر (مانند سطوح qradric) ساخته‌شده است. توابع GLU با پیشوند “glu” شروع می‌شوند مثل: gluLookAt، gluPerspective

3. OpenGL Utility Toolkit (GLUT): این کتابخانه پشتیبانی برای تعامل با سیستم‌عامل (مانند ایجاد پنجره، کنترل کلید و ورودی‌های ماوس) و مدل‌های ساختمانی بیشتر (مانند کره و چنبره) را فراهم می‌کند. توابع GLUT با پیشوند “شلو” شروع می‌شوند مثل: glutCreatewindow، glutMouseFunc.

هریک از کتابخانه‌های فوق، عملکرد کتابخانه ماقبل خود را تکمیل می‌کنند که درنهایت کتابخانه GLEW کامل‌ترین آنها به شمار می‌رود و حاوی تمام ابزارهای موردنیاز opengl است. این کتابخانه همراه با opengl کارهای اصلی از قبیل: ایجاد چندضلعی‌ها و textureها، تبدیل مختصات به یکدیگر برای نمایش حرکت، تولید خطاهای opengl و غیره را انجام می‌دهد.

4. OpenGL Extension Wrangler Library (GLEW) : کتابخانه GLEW مکانیسم‌های زمان اجرای کارآمدی را برای تعیین اینکه کدام‌یک از افزونه‌های OpenGL در پلتفرم هدف پشتیبانی می‌شود را ارائه می‌دهد.

روش نصب کتابخانه های opengl

معمولاً هر کارت گرافیکی نسخه‌ای از opengl را پشتیبانی می‌کند و درایوهای کارت‌های گرافیکی شامل جدیدترین نسخه‌های opengl می‌باشند.

روش نصب کتابخانه های opengl

در مرحله اول فایل glut را دانلود می‌کنیم که این فایل خود شامل سه فایل دیگر به نام‌های glut.h, glut32.lib, glut32.dll می‌باشد. همانطوری‌که در شکل فوق مشاهده می‌کنید، فایل‌های موجود در glut را در آدرس‌های ذکرشده کپی می‌کنیم. مراحل فوق برای نصب کتابخانه‌های opengl در vs.c++ 2010 می‌باشد، برای نصب opengl در ورژن‌های پایین‌تر از 2010 به‌جای کپی در محل‌های 1 و 2 ،glut32.lib  را در آدرس C:\Program Files\Microsoft Visual Studio\VC\lib و glut.h را در آدرس  C:\Program Files\Microsoft Visual Studio\VC\include کپی می‌کنیم.

فایل های مربوط به کتابخانه OpengGL را می توانید از طریق این لینک (+) [3] دانلود کنید.

آموزش برنامه نویسی opengl با c++

برای اینکه بتوانیم یک تصویر یا گرافیک را نمایش دهیم باید خصوصیات هندسی آن را بررسی کرده و مشخص کنیم مثل مختصات رأس‌ها، اتصالات بین رئوس، وجه‌ها و رنگ‌ها و غیره. این مشخصات به‌صورت راست‌گرد در جهت حرکت عقربه‌های ساعت اعمال می‌شوند.

در opengl نام توابع کتابخانه‌ای با پیشوند gl شروع‌شده و حرف اول آن‌هم به‌صورت حرف بزرگ نوشته می‌شود مثل تابع glBegin. همانند سایر توابع به‌کار رفته در زبان‌های مختلف برنامه‌نویسی این توابع هم دارای پارامترهایی هستند اما به این پارامترها ثابت نمادین گفته می‌شود.

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

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

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

پارامترهای ثابت نمادین سه جمله به‌صورت سری می‌باشند که به تابع‌ها فرستاده‌شده و وظیفه خاص مختص به خودشان را انجام می‌دهند. ثابت‌های نمادین با حروف بزرگ نشان داده می‌شوند مثل: GL_2D, GL_POLYGON.

داده ها در opengl با c++

برای اینکه نوع داده‌ها در تمامی سیستم‌ها قابل پشتیبانی باشند، آنها را به‌صورت زیر تعریف می‌کنند یعنی به ابتدای نوع داده GL اضافه می‌شود. چهار کتابخانه دیگر که در قسمت‌های قبل معرفی شدند با کتابخانه اصلی opengl پیوند خورده‌اند تا امکانات بیشتری را ارائه داده و از سیستم‌های گوناگون زیادی حمایت کنند. مثلاً نوع کتابخانه‌های ویندوز و اپل از هم جداست.

[LEFT] GLbyte        GLshort         GLint       GLfloat          GLdouble           GLboolean
[/LEFT]

فایل های شاخص

به فضاهایی که دارای نام بوده و توابع مربوط به کتابخانه‌ها در آنها قرار دارند، فایل‌های شاخص گفته می‌شود. در زبان c++ با به‌کار بردن فایل‌های شاخص می‌توان از توابع مربوط به کتابخانه‌های GL, GLU, GLUT, GLEW استفاده کرد. در زیر مثالی از کد نویسی آورده‌ایم که کتابخانه‌های مختلف را برای opengl و GLU به هم پیوند می‌زند.

[LEFT]
#include<windows.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<GL/glut.h>
[/LEFT]

البته باوجود کتابخانه‌های GLUT و GLEW دیگر نیازی نیست که از کتابخانه‌های GL و GLU استفاده کنیم چراکه GLUT و GLEW امکانات موجود در آنها را نیز پوشش می‌دهند. نکته دیگر اینکه بعضی از کامپایلرها پسوند .h را پشتیبانی نمی‌کنند و پیغام خطا ظاهر می‌شود، در این‌گونه موارد پسوند .h را حذف می‌کنیم.

اجرای برنامه opengl در c++

برای اجرای برنامه‌های opengl در c++ مراحل زیر پیموده می‌شود.

اجرای برنامه opengl در c++

با اجرای این مراحل برنامه اجراشده و نتیجه در خروجی و صفحه مانیتور نمایش داده می‌شود.

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

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

پروژه ساعت دیواری در OpenGl در محیط Visual Studio به زبان ++C نوشته شده است. برای دانلود این پروژه می توانید روی لینک زیر کلیک کنید.

قالب کلی برنامه‌های opengl در زبان برنامه‌نویسی c++ به‌صورت زیر است.

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

دستورات opengl در c++

در این قسمت از آموزش opengl با c++ به معرفی برخی از دستورات مهم استفاده‌شده در opengl می‌پردازیم.

رسم اشکال سه بعدی در openGL

رسم اشکال سه بعدی در مبحث آموزش opengl در زبان c++ همانطوری‌که در شکل زیر مشاهده می‌کنید، بسیار ساده و آسان است، به همین دلیل برای برنامه‌نویسان لذت‌بخش است. دستورات مربوط به سه شکل رایج حجمی در زیر آورده شده است.

رسم اشکال سه بعدی در openGL

دستور 1، برای رسم یک مکعب به‌صورت هموار، دستور 2 برای رسم یک مخروط به‌صورت هموار و دستور 3 برای رسم یک مخروط به شکل هموار به‌کار برده می‌شوند.

مثال برنامه نویسی با opengl در c++

در بخش پایانی آموزش opengl با c++ می‌خواهیم چند مثال از کد نویسی opengl با c++ ارائه دهیم.

کد نویسی رسم خط با opengl در c++

این مثال برنامه‌نویسی مربوط به رسم یک خط ساده در صفحه نشان می‌دهد.

#include<gl/glut.h>
void init()
{
glClearColor(0,0,0);
glMatrixMode(GL_PROJECTION);
ghuOrtho2D(0,100,0,200);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glcolor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
glVertex2i(30,100);
glVertex2i(50,10);
glEnd();
glFlush();
}
int main(int argc,char **argv)
{
glutInit(&argc.argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutCreateWindowPosition(200,200);
glutCreateWindow("Line");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}

خروجی این برنامه به‌صورت زیر است و نکته قابل‌توجه در آن این است که عرض خط را می‌توان با استفاده از تابع glLineWidth(glfloat linewidth) تعیین کرد.

کد نویسی رسم خط با opengl در c++

کد نویسی رسم مثلث با opengl در c++

این مثال مربوط به‌رسم یک مثلث با طیف رنگی می‌باشد.

#include <GL_glut.h>

void Init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
};
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glRotatef(0,0.0,0.0,1.0);
glBegin(GL_POLYGON);
glcolor3f(1.0,0.0,0.0);
glVertex2f(-0.5,-0.5);
glColor3f(0.0,1.0,0.0);
glVertex2f(0.5,-0.5);
glColor3f(0.0,0.0,1.0);
glVertex2f(0.0,0.5);
glEnd();
glPopMatrix();
glutSwapBuffers();
}

int main(int argc, char **argv)
{glutInit(&argc,argv);
gluyInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSizw(400,400);
glutCreateWindow("Gradiant Tringle");
Init();
glutDisplayFunc(display);
 glutMainLoop();
return 0;
}

خروجی برنامه فوق به‌صورت یک مثلث در وسط صفحه با طیف رنگی به‌صورت زیر است.

کد نویسی رسم مثلث با opengl در c++

سورس کد شبیه سازی منظومه شمسی در #C با OPENGL [6]

سورس کد شبیه سازی منظومه شمسی در #C با OPENGL

این پروژه با استفاده از زبان برنامه نویسی سی شارپ #C در microsoft visual studio 2013 نوشته شده و توسط نسخه های بالاتر از 2013 ساپورت می شود. برای تهیه این سورس کد روی لینک زیر کلیک کنید.

کد نویسی رسم کره با opengl در c++

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

#include<gl/glut.h>
GLfloat A[4]={1,1,1,};
GLfloat Pos1[4]={9,5,1,0};
GLfloat D=0;
int i=0;
int j=1;
int k=0;
int cheaker=0;
void init()
{
glClearColor(0,0,0,0);
glShadModel(GL_SMOOTH);
glLightfv(GL_LIGHT0,GL_DIFFUSE,A);

glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
void display()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();

glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT);
glColor3f(0,1,0);
glEnable(GL_LIGHT0);
glutSolidSphere(0.4,100,100);

glPushMatrix();

glRotatef(D,i,j,k);
glLightfv(GL_LIGHT0,GL_POSITION,Pos1);

glPopMatrix();

glutSwapBuffers();
D+=.3;
A[1]-=.001;
glLightfv(GL_LIGHT0,GL_DIFFUSE,A);
}

void main (int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(800,600);
glutInitWindowPosition(100,100);
glutCreateWindow("kore noor rang");
init();
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}


خروجی برنامه فوق همانطوری‌که مشاهده می‌کنید به‌صورت یک کره در وسط صفحه است.

کد نویسی رسم کره با opengl در c++

سه مثال فوق در جهت تکمیل مبحث آموزش opengl با c++ آورده شده‌اند.

پروژه میله پرچم میدان در OpenGL در سی شارپ #C [7]

پروژه میله پرچم میدان در OpenGL در سی شارپ #C

پروژه میله پرچم میدان در OpenGL با استفاده از برنامه نویسی #C نوشته شده است. پروژه میله پرچم میدان سه بعدی 3D یکی از پروژه های محبوب و جالب در برنامه نویسی گرافیکی به کمک OpenGL است. برای تهیه این پروژه روی لینک زیر کلیک کنید.

سخن پایانی در مورد آموزش opengl با c++

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

همانطوری‌که دیدید این سبک برنامه‌نویسی امکانات بیشماری دارد که کار شما را آسان کرده و نیازهای شما در این زمینه را برآورده می‌سازد فقط کافیست با دستورات و کتابخانه‌ها و توابع آن آشنا شده و آنها را به‌صورت عملی به‌کار ببرید. امیدواریم آموزش opengl با c++ توانسته باشد در جهت یاری به شما عزیزان قدمی برداشته باشد.