34
OpenGL ا بی ک ی فرا گ ی س ی و ن ه م ا رب بA.M. Safaei Ref Dr.Nurani ه گان ی ش خ ب ی! ست ه د داوب ام خ ه ب ن م ش ش سه ل خ

OpenGL برنامه نویسی گرافیکی با

  • Upload
    felton

  • View
    191

  • Download
    9

Embed Size (px)

DESCRIPTION

به نام خداوند هستی بخش یگانه. جلسه ششم. OpenGL برنامه نویسی گرافیکی با. A.M. Safaei Ref Dr.Nurani. جلسه ششم. گرافیک کامپیوتری. مدیریت پنجره – نمایش توسط در OpenGL. 1- مقدار اولیه دادن برای GLUT glutInit (& argc , argv ); - PowerPoint PPT Presentation

Citation preview

Page 1: OpenGL برنامه نویسی گرافیکی با

OpenGLبرنامه نویسی گرافیکی با

A.M. Safaei Ref Dr.Nurani

به نام خداوند هستی بخش یگانه

جلسه ششم

Page 2: OpenGL برنامه نویسی گرافیکی با

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

GLUT- مقدار اولیه دادن برای1o glutInit (&argc ,argv);

پنجره نمایش بر روی صفحه مانیتور با یک شرح نوشته در نوار عنوان -2o glutCreateWindow(“An example OpenGL program”);

مشخص کردن محتوای پنجره نمایش -3o glutDisplayFunc (lineSegment);

برای نمایش پنجره نمایش در صفحه مانیتور -4o glutMainloop();

برای دادن موقع(یت اولیه -5o glutInitWindowPosition(50,100);

مدیریت پنجره – نمایش توسط در OpenGL

جلسه ششم

Page 3: OpenGL برنامه نویسی گرافیکی با

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

) مقدار اولیه دادن به پهنا و ارتفاع(6glutInitWindowSize (400,300);

( بافر سازی و انتخاب مدلهای رنگ7glutInitDisplyMode (GLUT_SINGLE | GLUT_RGB);

( رنگ زمینه برای پنجره نمایش8glClearColor(1.0,1.0,1.0,0.0)

( ایجاد طرحهای رنگی برای اشیای مورد نمایش در یک صحنه9Glcolor3f(1.0,0.0,0.0);

مدیریت پنجره – نمایش توسط در OpenGL

جلسه ششم

Page 4: OpenGL برنامه نویسی گرافیکی با

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

و 1 هم(ه مختص(ات ه(ا در بین دو عدد -OpenGLدر • قرار می گیرند.1+

بع(د، دو محور • دو و xدر Y داری(م ک(ه هر اختیار در را فراهم می آمورند.1 تا +1کدام از -

بیان مختصات در OpenGL

جلسه ششم

Page 5: OpenGL برنامه نویسی گرافیکی با

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

دو جهانی مختص-ات مرج-ع چوب چهار کردن مشخ-ص بعدی

مختص(ات • ب(ا نمای(ش مختصات ( xmin, ymin)پنجره و (xmax, ymax).طبق شکل زیر نشان داده می شود

بیان مختصات در OpenGL

جلسه ششم

X min X max

y min

y max

پنجره نمایش

صفحه مانیتور

Page 6: OpenGL برنامه نویسی گرافیکی با

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

نحوه اختصاص رئوس در OpenGL

جلسه ششم

•OpenGL روبه و مختص(ات مبدا در را خود دی(د زاوی(ه قرار می دهد.Zطرف منفی محور

Page 7: OpenGL برنامه نویسی گرافیکی با

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

مختصات رسم

جلسه ششم

برای رسم اشکال دو بعدی نورپردازی و سایه زنی وجود •ندارد.

اکثر شکل ها ب(ا دادن رئوس به آن رس(م می OpenGL در • OpenGLشون(د، جه(ت رس(م مثل(ث ب(ا دادن س(ه راس به

آن را رسم می کند .در • رفت(ه بکار معین glVertexواح(د برنام(ه خود توس(ط

می شود.

برای مشخ(ص کردن مختصات OpenGL در glVertexتاب(ع •ه(ر نوع موض(ع نقط(ه ای ب(ه کار م(ی رود. توج(ه کنی(د توابع

شروع می شوند. gl با OpenGLپایه

Page 8: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

glEnd و تابع glBegin بای(د بی(ن تاب(ع glVertexی(ک تاب(ع • برای شناسایی نوع glBeginقرار گیرد. از آرگومان تاب(ع

بای(د نمای(ش داده شود، اس(تفاده می مبنای خروج(ی ک(ه هیچ آرگومانی نمیگیرد. glEndشود ولی تابع

برای نقطه عبارت است از: OpenGLصورت مشخصه • glBegin (GL_POINTS) ;

glVertex; ) ( * glEnd ; ) (

فرمت توابع:: نحوه اختصاص رئوس درOpenGL

Page 9: OpenGL برنامه نویسی گرافیکی با

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

دو حالت کلیglVertex :

- اگر نقاط را بصورت تک تک مشخص نمایید.1

• glVertex{234}(dfis)(مختصات)

- اگر نقاط را بصورت آرایه ای مشخص نمایید.2

• glVertex{234}(dfis)V(مختصات)

یا همان آرایه استVector ابتدای Vحرف •

فرمت توابع:: نحوه اختصاص رئوس درOpenGL

جلسه ششم

Page 10: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

{2,3,4}:

glVertex2 داده مختصات بودن بعدی دو معنای ب(ه را بعنوان دو پارامتر می گیرد.Y و Xاست و

glVertex3 ب(ه معنای س(ه بعدی بودن مختصات داده را بعنوان سه پارامتر می گیرد.Zو Y و Xاست و

glVertex4 ب(ه معنای س(ه بعدی بودن مختصات داده را راس بزرگنمایی میزان چهارم پارامت(ر و اس(ت

مشخص می کند.

::فرمت توابعglVertex{234}(dfis)V(ت)م(خ(ت(ص(ا)

Page 11: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

glVertex4 ب(ه معنای س(ه بعدی بودن مختص(ات داده است و

پارامتر چهارم میزان بزرگنمایی راس را مشخص می کند.

تجان(س پارامت(ر را چهارم پارامت(ر h نمایی بزرگ ضری(ب

، با با OpenGLبرای مقادیر مختصات دکارتی نیز می نمامند.

فضای دو بعدی ب(ه ص(ورت حال(ت خاص(ی از فضای سه بعدی

, x, y( معادل با)x,yرفتار م(ی کن(د، ه(ر مشخص(ه مختص(ه ای )

است.h = 1 ( با 0

::فرمت توابعglVertex{234}(dfis)V(ت)م(خ(ت(ص(ا)

Page 12: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

قس(متdfis تاب(ع را ارسال ای(ن ب(ه پارامترهای(ی ک(ه : نوع می کنید مشخص می کند. که مشخص کننده ی مقادیر زیر

هستند : : اعداد صحیحi (integer)

: اعداد حقیقی کوتاهs (short)

: اعداد حقیقی با ممیز شناورf (float)

: اعداد حقیقی مضاعفd (double)

3 یا 2اگ(ر نقاط بص(ورت آرای(ه معرف(ی شون(د ، ابتدا رئوس گان(ه را در ی(ک آرای(ه معرف(ی م(ی نمایی(م و س(پس آ(ن را به

تابع ارسال می کنیم.

::فرمت توابعglVertex{234}(dfis)V(ت)م(خ(ت(ص(ا)

Page 13: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

قس(متdfis نوع پارامترهای(ی ک(ه ب(ه ای(ن تاب(ع را ارس(ال می : زیر مقادی(ر ی کننده مشخ(ص ک(ه کند. م(ی مشخ(ص کنی(د

هستند : : اعداد صحیحi (integer)

: اعداد حقیقی کوتاهs (short)

: اعداد حقیقی با ممیز شناورf (float)

: اعداد حقیقی مضاعفd (double)

3 یا 2اگ(ر نقاط بص(ورت آرای(ه معرف(ی شون(د ، ابتدا رئوس گان(ه را در ی(ک آرای(ه معرف(ی م(ی نمایی(م و س(پس آ(ن را به

تابع ارسال می کنیم.

::فرمت توابعglVertex{234}(dfis)V(ت)م(خ(ت(ص(ا)

Page 14: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

:مثالglVertex2i(2, 4);

نقط(ه در را دوبعدی 4، 2راس(ی مختصات ص(فحه از مشخص می کند.

GLfloat v[3] = {2.0, -9.0, +4.0};glVertex3fv(v);

ابتدا ی(ک آرای(ه ب(ا س(ه مولف(ه از نوعGlfloat تعریف کرده و س(پس تنها آ(ن آرای(ه را ب(ه تاب(ع تحوی(ل می دهیم ) توج(ه کنید

نیس(تند ول(ی به 1 و +1ک(ه نقاط داده شده اگ(ر چ(ه بی(ن -طور خودکار به این دوعدد تبدیل می شوند(.

::فرمت توابعglVertex{234}(dfis)V(ت)م(خ(ت(ص(ا)

Page 15: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

OpenGL را رئوس رنگ بای(د ابتدا رئوس رس(م برای بصورت زیر می باشد:glColorبداند، تابع عمومی رنگ

glColor{34}(bdfisubusui)V(رنگ مورد نظر)

پارامتری 3 پارامتر بپذیرد، نوع 4 یا 3این تابع می تواند )قرم(ز، س(بز و آب(ی( را مشخ(ص می کندو RGBرنگهای

( را مشخ(ص می Alphaپارامت(ر چهارم میزان شفافی(ت )کند.

:: نحوه اختصاص رنگ هاglColor

Page 16: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

glColor{34}(bdfisubusui)V(رنگ مورد نظر)

نوع داده های پارامتر هایglColor: · b (byte)· d (double)· f (float)· i (integer)· s (short)· ub (unsigned byte)· us (unsigned short)· ui (unsigned integer)

:: نحوه اختصاص رنگ هاglColor

Page 17: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

glColor{34}(bdfisubusui)V(رنگ مورد نظر)

:مثال

ایجاد خواهد 0.2رنگ(ی مای(ل ب(ه زرد ب(ا میزان شفافی(ت شد.

)رنگ قرمز ) استفاده از نوع آرایه ای اختصاص رنگ

glColor4f(1.0,0.5,1.0,0.2)

:: نحوه اختصاص رنگ هاglColor

Glint c[3]={255,0,0};glColor3i(c);

Page 18: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

در هم(ه برنام(ه های گرفیک(ی الزم اس(ت فای(ل های شاخص بگنجانیم.OpenGLرا برای کتابخانه هسته

فایل های شاخص در OpenGL

ویندوز WGLفایل شاخص روتینهای

فایل شاخص ماکروهای مورد نیاز پنجره های مایکروسافت

#include <windows.h>

#include <GL/gl.h>

#include <GL/glu.h>

برای مدیریت پنجره استفاده کنیم نیازی به گنجاندن GLUTاگر از gl.h و glu.hنخواهد بود

#include <GL/glut.h>

Page 19: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

فایل های شخصی که الزمه کدC هستند ++

اس(تاندارد برای ANSIدر C بنام فایلهای شاخص ای(ن ++cstdio ، Cstdlib و cmath.نامیده می شود

فایل های شاخص در OpenGL

#include <stdio.h>

#include <stdlibl.h>

#include <math.h>

Page 20: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

وقت(ی م(ی خواهی(د شکل(ی را ایجاد کنی(د بایس(تی آن را دربا OpenGLبالکهای دس(تور ک(ه glBegin و ) (glEnd ) (

مشخص می شود قرار دهید.

ابتدا رن(گ شک(ل مورد نظ(ر را خارج از بالک تعیی(ن می 1.کنید.

از 2. اس(تفاده ب(ا پارامتر glBeginس(پس ارس(ال و ) (مربوطه نوع شکل را مشخص می کنید.

سپس رئوس شکل را در داخل بالک قرار می دهیم.3.

می بندید.glEndدر انتها بالک را با 4.

بالک های دستور OpenGL

Page 21: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

نقط-ه، خ-ط، مثل-ث، چهار ضلع-ی و چن-د ضلعی) گسسته و پیوسته(

( رسم نقطهGL_POINTS:)

ربع چهارم نتیج-ه در رن(گ نقط(ه کوچ(ک ص(ورتی ی(ک :صفحه مختصات.

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

glColor3f(1.0, 0.0,1.0);

glBegin(GL_POINTS);

glVertex2f(2.0,-0.5);

glEnd;

Page 22: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

glPointSize (64 : این تابع اندازه نقاط بزرگ می کند) حداکثرGL_POINT_SMOOTH شک(ل نقط(ه را از حال(ت مرب(ع پیکس(لی به :

شکل دایره ای تبدیل می کند.

رسم اشکال ساده دو بعدی :: رسم نقطه(GL_POINTS)

glClear(GL_COLOR_BUFFER_BIT); // clear the screen

glColor3f(1.0, 0.0,1.0); // set the drawing color

glEnable(GL_POINT_SMOOTH);

glPointSize(20.0);

glBegin(GL_POINTS);

glVertex2f(2.0,-0.5);

glEnd;

glutSwapBuffers(); // send all output to display (from buffers)

Page 23: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

برای رس(م چن(د نقط(ه م(ی توان از چندی(ن بالگ اس(تفاده کرد کهتنها وقت و خوانایی برنامه را ازبین می ببرد.

رسم اشکال ساده دو بعدی :: رسم نقطه(GL_POINTS)

Page 24: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

: س-ه نقط-ه ب-ا فاص-له های متس-اوی در طول ی-ک خط تس-ت رسم شده اند.2مستقیم دو بعدی با ضریب زاویه

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

50

100

150

200

50 100 150

Y

X

را برای رس-م ای-ن س-ه نقط-ه بصورت OpenGLال-ف( تواب-ع عادی بنویسید.

را برای رس-م ای-ن س-ه نقط-ه بصورت OpenGLب( تواب-ع آرایه بنو-یسید.

Page 25: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

الف:

رسم اشکال ساده دو بعدی :: حل تمرین

glBegin (GL_POINTS ) ;

glVertex2i ( 50, 100 ) ;

glVertex2i ( 75, 150 ) ;

glVertex2i (100, 200) ;

glEnd ( ) ;

Int point1 [ ] = { 50, 100 } ;

Int point2 [ ] = { 75, 150 } ;

Int point3 [ ] = { 100, 200 } ;

ب:

glBegin ( GL_POINTS ) ;

glVertex2iv ( point1) ;

glVertex2iv (point2 ) ;

glVertex2iv ( point3 ) ;

glEnd ( ) ;

Page 26: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

(GL_LINES رسم پاره خط های جدا از هم )1.

باز 2. انتهایی دو س-ر ب-ا پیوس-ته ه-م ب-ه رس-م خطوط

(GL_LINE_STRIP)

رس-م خطوط ب-ه ه-م پیوس-ته ب-ا دو س-ر انتهای-ی ب-ه هم 3.

(GL_LINE_LOOPپیوسته )

رسم خط در OpenGL :: (GL_LINES)

Page 27: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

پایان و بلوک شروع در را انتهایی و ابتدای(ی OpenGLدو راس قرار glBegin را بعنوان پارامت(ر به GL_LINESقرار م(ی دهی(م و

می دهیم. رئوس را می بایست بصورت دوتایی در بالک شروع و پایان قرار

;glBegin(GL_LINES)دهیم .

glVertex2f(-0.2, -0.5);

glVertex2f(0.3, 0.8);

glVertex2f(-0.8, -0.8);

glVertex2f(0.8, -0.8);

glEnd();

( رسم پاره خط های جدا از هم GL_LINES)

Page 28: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

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

با ثابتGL_LINE_STRIP.یک چند ضلعی حاصل می شود

glBegin(GL_LINE_STRIP);

glVertex2f(-0.2, -0.5);

glVertex2f(0.3, 0.8);

glVertex2f(0.4, 0.1);

glVertex2f(-0.8, 0.0);

glEnd();

رسم خطوط( پیوسته با دو سر انتهایی باز ( GL_LINE_STRIP)

Page 29: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

ب(ه ه(م متص(ل شدن راس اول و راس آخ(ر در هنگام خروج(ی تابعمی باشد

ثابتGL_LINE_LOOP.چند ضلعی بسته تولید می کند

رسم خطوط( پیوسته با دو سر انتهایی به هم بسته ( GL_LINE_LOOP)

glBegin(GL_LINE_LOOP);

glVertex2f(-0.2, -0.5);

glVertex2f(0.3, 0.8);

glVertex2f(0.4, 0.1);

glVertex2f(-0.8, 0.0);

glEnd();

Page 30: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

با استفاده از تابعglLineWidth)(

تغ(ییر عرض خطوط

glLineWidth(7.0)

glBegin(GL_LINE_LOOP);

glVertex2f(-0.2, -0.5);

glVertex2f(0.3, 0.8);

glVertex2f(0.4, 0.1);

glVertex2f(-0.8, 0.0);

glEnd();

Page 31: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

انواع مثلث درOpenGL:مثلث های جدا از هم مثلث های دو بدو مشترک در یک ضلعمثلث های مشترک در یک راس واحد

رسم مثلث در OpenGL :: (GL_TRIANGLES)

Page 32: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

برای ترس(یم ه(ر مثل(ث بای(د س(ه راس مشخ(ص شده باشد GL_TRIANGLESبرای ترس(یم مثل(ث های جدا از ه(م از تابع

استفاده می شود.

( :: مثلث های جدا از هم GL_TRIANGLES )

glBegin(GL_TRIANGLES);

glVertex2f(-0.8, -0.8);

glVertex2f(-0.6, -0.4);

glVertex2f(-0.3, -0.8);

glVertex2f(0.8, 0.8);

glVertex2f(0.6, 0.4);

glVertex2f(0.3, 0.8);

glVertex2f(-0.4, 0.0);

glVertex2f(0.0, 0.5);

glVertex2f(0.4, 0.0);

glEnd();

Page 33: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

این نوع جهت رسم مثلث های پیوسته مناس(ب اس(ت. جهترس(م ابتدا س(ه راس مثل(ث اول را رس(م کنی(د و از آ(ن ب(ه بعد تنه(ا ب(ا دادن ی(ک راس، ی(ک مثل(ث بر روی ضلع(ی ک(ه ب(ه آن

نزدیک تر است ساخته می شود.

:: مثلث های دوبه دو مشترک در یک ضلع (GL_TRIANGLE_STRIP )

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_TRIANGLE_STRIP); // Separate Triangle

glVertex2f(-0.4, -0.5);

glVertex2f(-0.4, -0.1);

glVertex2f(0.0, -0.5);

glVertex2f(0.0, -0.1);

glVertex2f(0.4, -0.5);glEnd();

Page 34: OpenGL برنامه نویسی گرافیکی با

گرافیک کامپیوتری جلسه ششم

این نوع جهت رس(م مثلث های پیوس(ته مناس(ب است. جهترس(م ابتدا س(ه راس مثل(ث اول را رس(م کنی(د و از آن به بعد تنه(ا ب(ا دادن ی(ک راس، ی(ک مثل(ث بر روی ضلع(ی ک(ه ب(ه آن

نزدیک تر است ساخته می شود.

:: مثلث های مشترک در یک راس واحد (GL_TRIANGLE_FAN )

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);glBegin(GL_TRIANGLE_FAN);

glVertex2f(-0.0, 0.0);glVertex2f(-0.7, 0.0);glVertex2f(-0.7, 0.7);.

glVertex2f(0.0, 0.7);glVertex2f(0.7, 0.7);glVertex2f(0.7, 0.0);glVertex2f(0.7, -0.7);glVertex2f(0.0, -0.7);glVertex2f(-0.7, -0.7);

glEnd();