48
ا ب ي ي ا ن ش آOpenGL عدي ب ه س ي س ي و ن ه م ا رب ب اده آز ف# ت ش ا آ بOpenGL ي ف ل د# ت ش دو ن ل ع رآ ه ز

آشنايي با OpenGL

Embed Size (px)

DESCRIPTION

آشنايي با OpenGL. برنامه نويسي سه بعدي با استفاده از OpenGL دلفي. زهرا علیدوست. چکیده. مقدمه انواع کتابخانه های برنامه نویسی سه بعدی. OpenGL چيست ؟ OpenGL چگونه کار میکند ؟ كتابخانه هاي كمكي در OpenGL . انواع داده ها در OpenGl . ساختار توابع استفاده شده در OpenGl . - PowerPoint PPT Presentation

Citation preview

Page 1: آشنايي با  OpenGL

با آشناييOpenGL

بعدي سه نويسي با برنامهاز دلفي OpenGLاستفاده

علیدوست زهرا

Page 2: آشنايي با  OpenGL

چکیده

مقدمه. بعدی سه نویسی برنامه های کتابخانه انواع OpenGL چيست ؟OpenGL میکند کار ؟چگونه كتابخانه هاي كمكي درOpenGL. انواع داده ها درOpenGl. ساختار توابع استفاده شده درOpenGl. در .OpenGL خطاها ساختار برنامه درOpenGl.

Page 3: آشنايي با  OpenGL

opengl ساخت براي باال كيفيت با استاندارديبعد سه هاي مثال . ی برنامه براي باشد مي صنعتي

معروف رياضي هاي برنامه اكثر، Mathematicaمانند Matlab هاي و برنامه

مانن ، Working model 3dد صنعتي ANSYS وكه قوي تكنولوژي اين از اينها هاي امثال ويرايش

، دارد گوناگوني هاي عامل سيستم تحت نيز ديگريكنند مي .استفاده

مقدمه

Page 4: آشنايي با  OpenGL

نويسي برنامه استاندارد كتابخانه نوع 3D دو:Win32تحت دارد وجود

1- Direct-3D Immediate Mode2- OpenGL

برنامه های كتابخانه استاندارد3D نويسي

Page 5: آشنايي با  OpenGL

Open GLچر؟ا

Page 6: آشنايي با  OpenGL

از استفاده سادگي و موجود API طراحيOpen GLدر

خوانا و ساده کد تولید زیاد زمان ندادن اختصاصD3D نويسان برنامه به را زيادي سختي

كند مي تحميل كد از خط يك تنها موارد از بسياري GL در

كد صفحه نيم يك باشد . D3Dمعادل مي

Direct-xوِ Open GLمقایسه

Page 7: آشنايي با  OpenGL

GL به يك فراخواني با و دارد سروكار توابع بايافت دست نهايي نتيجه به توان مي توابع . يك

glBegin (GL_TRIANGLES);glVertex (0,0,0);glVertex (1,1,0);glVertex (2,0,0);glEnd ();

Direct-xوِ Open GLمقایسه

Page 8: آشنايي با  OpenGL

: D3D در معادل كد(psuedo code, and incomplete)v = &buffer.vertexes[0];v->x = 0; v->y = 0; v->z = 0;v++;v->x = 1; v->y = 1; v->z = 0;v++;v->x = 2; v->y = 0; v->z = 0;c = &buffer.commands;c->operation = DRAW_TRIANGLE;c->vertexes[0] = 0;c->vertexes[1] = 1;c->vertexes[2] = 2;IssueExecuteBuffer (buffer);

Direct-xوِ Open GLمقایسه

Page 9: آشنايي با  OpenGL

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

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

. از استفاده با است انتقال قابل و سریعOpenGL و زیبا بعدی سه تصاویر میتوانید شما

. از استفاده فایده بزرگترین کنید طراحی جذابیOpenGL ردیاب یک از العاده فوق که اینست

است ) ray tracer (نور .سریعتر

؟ OpenGLچيست

Page 10: آشنايي با  OpenGL

OpenGL هدف دو به رسیدن برایشد ارائه

با ارتباط های پیچیدگی کردن مخیی ارائه ی بوسیله ، بعدی سه های شتابدهنده

API . واحد و یکسان هایی

سخت های پلتفرم امکانات کردن مخفیامکانات از ای مجموعه ی بوسیله ، افزاری

داشت اطمینان توان می همواره که مشخصپشتیبانی سازی ( که شبیه با حتی شوند می

( آنها افزاری نرم

Page 11: آشنايي با  OpenGL

OpenGL میکند کار چگونه

OpenGL یک آنکه از گرافیکی API بیشتر . توصیف بجای دارد ای رویه حالت باشد توصیفی

شود ظاهر باید چگونه صحنه اینکه و صحنهیافتن دست برای را الزم مراحل نویس برنامه

. این میکند تعیین را افکت یک یا معین نمایش بهاز زیادی دستورات فراخوانی باعث مراحل

OpenGL .رسم برای فرامین این میشودو نقطه و خط مانند گرافیکی ابتدایی اشکال

میشوند استفاده بعدی سه صحنه در . چندضلعی

Page 12: آشنايي با  OpenGL

هاي واسط و كمكي هاي كتابخانهOpenGl

AGL, GLX, WGL GLU (OpenGL Utility Library) GLUT (OpenGL Utility Toolkit)

Page 13: آشنايي با  OpenGL

در ها داده OpenGlانواع

در شده نوشته کدهای انتقال اینکه برایOpenGL پلتفرم به پلتفرم یک از راحتی به

باشند انتقال قابل داده OpenGL دیگر انواع . هر است کرده تعریف را خودش به مخصوص

حال بهر کامپایلری یا نویسی برنامه محیطمتغیر حافظه نوع و اندازه برای خاصی قواعد

سی مختلف دارد. " C "های

Page 14: آشنايي با  OpenGL
Page 15: آشنايي با  OpenGL

توابع دارند OpenGL تمام را زیر : قالب

در توابع نامگذاری قواعدOpenGL

<Library><Root><Optional><Optional>

Page 16: آشنايي با  OpenGL

در توابع نامگذاری قواعدOpenGL

Page 17: آشنايي با  OpenGL

در OpenGL خطاها

که میخواهید شما ای پروژه هر در که است واضحبصورت که بنویسید تربیت با و قوی ای برنامههم مقداری و دهد پاسخ کاربرانش به مودبانه

. گرافیکی های برنامه باشد داشته پذیری انعطافاز که قاعده OpenGL هم این از میکنند استفاده

. برنامه که میخواهید شما اگر نیستند مستثنیو خطاها باید شما شوند اجرا روان بطور هایتانقرار نظر مد همیشه را مترقبه غیر های رویداد

. دهید

Page 18: آشنايي با  OpenGL

کدهای برای بدی اتفاقات که هنگامیمیدهند روی : خوب

OpenGL شش از ای مجموعه از ذاتی بطورخاص نوع یک پرچم هر که میکند حمایت پرچم

. از یکی که زمان هر میدهد نشان را خطا ازخطا آن با متناظر پرچم بیفتد اتفاق خطاها این . کدام آیاهیچ بفهمیم اینکه برای میشود برقرارصدا را تابع این نه یا برقرارند ها پرچم این از

: میزنیم glGetError:Glenum

glGetError(void) ;

در OpenGL خطاها

Page 19: آشنايي با  OpenGL

کتابخانه در دیگری تابع از میتوانید همچنین شماGLU که کنید دارد gluErrorString استفاده نام

شرح را خطا پرچم که کنید دریافت ای رشته تا. میدهد

nst GLubyte* gluErrorString(GLenumerrorCode);

در OpenGL خطاها

Page 20: آشنايي با  OpenGL

در OpenGL خطاها

Page 21: آشنايي با  OpenGL

بعدي سه نويسي با برنامهاز دلفي OpenGLاستفاده

Page 22: آشنايي با  OpenGL

نمايش پنجره اندازي تعييرGLvoid ReSizeGLScene(GLsizei width, GLsizei height){ if (height==0) { height=1; }

glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

glMatrixMode(GL_MODELVIEW); glLoadIdentity();

}

Page 23: آشنايي با  OpenGL

پنجره هاي ويژگي و عمق رنگ، تعريف

نمايشint InitGL(GLvoid){

glShadeModel(GL_SMOOTH);glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT

, GL_NICEST); return TRUE;}

Page 24: آشنايي با  OpenGL

اجسام رسم تابع

int DrawGLScene(GLvoid){ glClear(GL_COLOR_BUFFER_BIT |

GL_DEPTH_BUFFER_BIT); glLoadIdentity(); return TRUE;}

Page 25: آشنايي با  OpenGL

نمايش پنجره حذف و ايجاد

تايع ايجاد پنجره رسم BOOL CreateGLWindow(char* title,

int width, int height, int bits, bool

fullscreenflag)تابع حذف پنجره رسم

GLvoid KillGLWindow(GLvoid)

Page 26: آشنايي با  OpenGL

رنگ ساده، اشكال كشيدنآميزي

Page 27: آشنايي با  OpenGL

صفحه در نقطه يك دادن نشانint DrawGLScene(GLvoid) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f);glBegin(GL_POINTS);

glVertex3f( 0.0f, -2.47f, 0.0f);glVertex3f(0.0f,0.0f, 0.0f);glVertex3f( 0.0f, 0.0f, 5.0f);

glEnd();return TRUE;

}

Page 28: آشنايي با  OpenGL

glVertex3f(0.0f,0.0f, 0.0f);

glVertex3f( 0.0f, -1.47f, 0.0f);

glVertex3f( 2.0f, 0.0f, 0.0f);

glTranslatef(-1.5f,0.0f,-6.0f);

glVertex3f( 2.0f, 0.0f, -12.0f);

glV

erte

x3f( 2

.0f, 0

.0f, 5

.0f);

Page 29: آشنايي با  OpenGL

glVertex3f(0.0f,0.0f, 0.0f);

glVertex3f( 0.0f, 0.0f, 5.0f);

glVertex3f( 0.0f, -2.47f, 0.0f);

glTranslatef(-3.0f,0.0f,-6.0f);

Page 30: آشنايي با  OpenGL

مثلث رسم

int DrawGLScene(GLvoid){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f,0.0f,-6.0f);glBegin(GL_TRIANGLES);

glVertex3f( 0.0f, 1.0f, 1.0f);glVertex3f(-1.0f,-1.0f, 1.0f);glVertex3f( 1.0f,-1.0f, 1.0f);

glEnd();return TRUE;

}نشان مي دهد كه رئوس داخل

Begin تشكيل يك مثلث را خواهند داد.

Page 31: آشنايي با  OpenGL
Page 32: آشنايي با  OpenGL

ضلعی چهار رسمint DrawGLScene(GLvoid){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f,0.0f,-6.0f);glBegin(GL_QUADS);

glVertex3f(-1.0f, 1.0f, 0.0f); // Top LeftglVertex3f( 1.0f, 1.0f, 0.0f); // Top RightglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom RightglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left

glEnd();return TRUE;

} نشان مي دهد كه رئوس داخل Begin تشكيل يك چهار ضلعی را

خواهند داد.

Page 33: آشنايي با  OpenGL
Page 34: آشنايي با  OpenGL

آميزي رنگبراي رنگ آميزي يك شکل دو روش وجود دارد :

- روش 1smootاول :

h

glTranslatef(-1.5f,0.0f,-6.0f);glBegin(GL_TRIANGLES);

glColor3f(4.0f,0.0f,0.0f);glVertex3f( 0.0f, 1.0f, 0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex3f(-1.0f,-1.0f, 0.0f);glColor3f(5.0f,0.0f,1.0f);glVertex3f( 1.0f,-1.0f, 0.0f);

glEnd();براي هر راس يكبار رنگ دهي

مي كنيم.

Page 35: آشنايي با  OpenGL

آميزي رنگ- روش 1

flatدوم :

glTranslatef(3.0f,0.0f,0.0f);glColor3f(0.5f,0.5f,1.0f);glBegin(GL_QUADS);

glVertex3f(-1.0f, 1.0f, 0.0f); // Top LeftglVertex3f( 1.0f, 1.0f, 0.0f); // Top RightglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom RightglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left

glEnd();

تنها يكبار رنگ دهي مي كنيم.

Page 36: آشنايي با  OpenGL
Page 37: آشنايي با  OpenGL

اشكال رسم شكل، دوران3D

Page 38: آشنايي با  OpenGL

دوران تابع

glRotatef(Angle,Xvector,Yvector,Zvector) آرگمان دوران به شكل 4اين تابع با گرفتن

اعمال مي نمايد.Angleميزان زاويه گردش شكل :Xvector ميزان دوران در راستاي محور :XYvector ميزان دوران در راستاي محور :YZvector ميزان دوران در راستاي محور :Z

Page 39: آشنايي با  OpenGL

دوران تابع گيري قرار محل

int DrawGLScene(GLvoid){ glClear(GL_COLOR_BUFFER_BIT |

GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(-1.5f,0.0f,-6.0f);glRotatef(rtri,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES);glEnd(); rtri+=0.2f;rquad-=0.15f;return TRUE;

}

Page 40: آشنايي با  OpenGL

خروجي

Page 41: آشنايي با  OpenGL

اشكال 3Dرسم

براي رسم اشكال سه بعدي تنها كافياست كه چند نتقطه جديد را براي بعد هاي

ديگر شكل خود را اضافه نماييد. در اينجا يك نمونه كد آورده مي شود كه به

مثلث و مربع مثال قبل يك بعد ديگر اضافه مي كند.

هر گوشه آنها را به رنگ خاصي در ميآورد.

Page 42: آشنايي با  OpenGL

بعدي سه مثلث رسمglBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f); // RedglVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front) glColor3f(0.0f,1.0f,0.0f); // GreenglVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front) glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right)glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right)glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right)

Page 43: آشنايي با  OpenGL

بعدي - سه مثلث 2رسم

glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back) glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back) glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back) glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Left)glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f(-1.0f,-1.0f,-1.0f); // Left Of Triangle (Left)glColor3f(0.0f,1.0f,0.0f); // Green glVertex3f(-1.0f,-1.0f, 1.0f); // Right Of Triangle (Left) glEnd();

Page 44: آشنايي با  OpenGL

بعدي سه مربع رسمglBegin(GL_QUADS);glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top) glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top) glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top) glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad

(Top) glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad

(Bottom)glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom)glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad

(Bottom)glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad

(Bottom)

Page 45: آشنايي با  OpenGL

بعدي - سه مربع 2رسم

glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front) glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front) glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad

(Front) glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad

(Front) glColor3f(1.0f,1.0f,0.0f); // Set The Color To Yellow glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad

(Back)glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad

(Back)glVertex3f(-1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Back) glVertex3f( 1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Back)

Page 46: آشنايي با  OpenGL

بعدي - سه مربع 3رسم

glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left) glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left) glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left) glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad

(Left) glColor3f(1.0f,0.0f,1.0f); // Set The Color To VioletglVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right) glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right) glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad

(Right)glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad

(Right)glEnd();

Page 47: آشنايي با  OpenGL

خروجي

Page 48: آشنايي با  OpenGL