1 / 34

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

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

felton
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. جلسه ششم گرافیک کامپیوتری • مدیریت پنجره – نمایش توسط در OpenGL • 1- مقدار اولیه دادن برایGLUT • glutInit (&argc ,argv); • 2- پنجره نمایش بر روی صفحه مانیتور با یک شرح نوشته در نوار عنوان • glutCreateWindow(“An example OpenGL program”); • 3- مشخص کردن محتوای پنجره نمایش • glutDisplayFunc (lineSegment); • 4- برای نمایش پنجره نمایش در صفحه مانیتور • glutMainloop(); • 5- برای دادن موقعیت اولیه • glutInitWindowPosition(50,100);

  3. جلسه ششم گرافیک کامپیوتری • مدیریت پنجره – نمایش توسط در OpenGL 6( مقدار اولیه دادن به پهنا و ارتفاع glutInitWindowSize (400,300); 7) بافر سازی و انتخاب مدلهای رنگ glutInitDisplyMode (GLUT_SINGLE | GLUT_RGB); 8) رنگ زمینه برای پنجره نمایش glClearColor(1.0,1.0,1.0,0.0) 9) ایجاد طرحهای رنگی برای اشیای مورد نمایش در یک صحنه Glcolor3f(1.0,0.0,0.0);

  4. جلسه ششم گرافیک کامپیوتری • بیان مختصات در OpenGL • در OpenGL همه مختصات ها در بین دو عدد -1 و +1 قرار می گیرند. • در دو بعد، دو محور x و Y در اختیار داریم که هر کدام از -1 تا +1 را فراهم می آمورند.

  5. جلسه ششم گرافیک کامپیوتری • بیان مختصات در OpenGL • مشخص کردن چهار چوب مرجع مختصات جهانی دو بعدی • پنجره نمایش با مختصات (xmin, ymin) و مختصات (xmax, ymax)طبق شکل زیر نشان داده می شود. صفحه مانیتور y max پنجره نمایش y min X min X max

  6. جلسه ششم گرافیک کامپیوتری • نحوه اختصاص رئوس در OpenGL • OpenGL زاویه دید خود را در مبدا مختصات و روبه طرف منفی محور Z قرار می دهد.

  7. جلسه ششم گرافیک کامپیوتری • مختصات رسم • برای رسم اشکال دو بعدی نورپردازی و سایه زنی وجود ندارد. • در OpenGLاکثر شکل ها با دادن رئوس به آن رسم می شوند، جهت رسم مثلث با دادن سه راس به OpenGL آن را رسم می کند . • واحد بکار رفته در glVertex توسط خود برنامه معین می شود. • تابع glVertex در OpenGL برای مشخص کردن مختصات هر نوع موضع نقطه ای به کار می رود. توجه کنید توابع پایه OpenGL با gl شروع می شوند.

  8. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: نحوه اختصاص رئوس در OpenGL • یک تابع glVertex باید بین تابع glBegin و تابع glEndقرار گیرد. از آرگومان تابع glBegin برای شناسایی نوع مبنای خروجی که باید نمایش داده شود، استفاده می شود ولی تابع glEndهیچ آرگومانی نمیگیرد. • صورت مشخصه OpenGL برای نقطه عبارت است از: • glBegin (GL_POINTS) ; • glVertex* ( ) ; • glEnd ( ) ;

  9. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: نحوه اختصاص رئوس در OpenGL • دو حالت کلی glVertex : • 1- اگر نقاط را بصورت تک تک مشخص نمایید. • glVertex{234}(dfis)(مختصات) • 2- اگر نقاط را بصورت آرایه ای مشخص نمایید. • glVertex{234}(dfis)V(مختصات) • حرف V ابتدای Vector یا همان آرایه است

  10. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: glVertex{234}(dfis)V(مختصات) • {2,3,4} : • glVertex2 به معنای دو بعدی بودن مختصات داده است و X و Y را بعنوان دو پارامتر می گیرد. • glVertex3 به معنای سه بعدی بودن مختصات داده است و X و Yو Z را بعنوان سه پارامتر می گیرد. • glVertex4 به معنای سه بعدی بودن مختصات داده است و پارامتر چهارم میزان بزرگنمایی راس را مشخص می کند.

  11. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: glVertex{234}(dfis)V(مختصات) • glVertex4 به معنای سه بعدی بودن مختصات داده است و پارامتر چهارم میزان بزرگنمایی راس را مشخص می کند. • پارامتر چهارم را پارامتر تجانس h ضریب بزرگ نمایی برای مقادیر مختصات دکارتی نیز می نمامند. OpenGL، با با فضای دو بعدی به صورت حالت خاصی از فضای سه بعدی رفتار می کند، هر مشخصه مختصه ای (x,y) معادل با(x, y , 0 ) با h = 1 است.

  12. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: glVertex{234}(dfis)V(مختصات) • قسمت dfis : نوع پارامترهایی که به این تابع را ارسال می کنید مشخص می کند. که مشخص کننده ی مقادیر زیر هستند : • اعداد صحیح : i (integer) • اعداد حقیقی کوتاه : s (short) • اعداد حقیقی با ممیز شناور : f (float) • اعداد حقیقی مضاعف : d (double) • اگر نقاط بصورت آرایه معرفی شوند ، ابتدا رئوس 2 یا 3 گانه را در یک آرایه معرفی می نماییم و سپس آن را به تابع ارسال می کنیم.

  13. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: glVertex{234}(dfis)V(مختصات) • قسمت dfis : نوع پارامترهایی که به این تابع را ارسال می کنید مشخص می کند. که مشخص کننده ی مقادیر زیر هستند : • اعداد صحیح : i (integer) • اعداد حقیقی کوتاه : s (short) • اعداد حقیقی با ممیز شناور : f (float) • اعداد حقیقی مضاعف : d (double) • اگر نقاط بصورت آرایه معرفی شوند ، ابتدا رئوس 2 یا 3 گانه را در یک آرایه معرفی می نماییم و سپس آن را به تابع ارسال می کنیم.

  14. جلسه ششم گرافیک کامپیوتری • فرمت توابع:: glVertex{234}(dfis)V(مختصات) • مثال: • glVertex2i(2, 4); • راسی را در نقطه 2، 4 از صفحه مختصات دوبعدی مشخص می کند. • GLfloat v[3] = {2.0, -9.0, +4.0}; • glVertex3fv(v); • ابتدا یک آرایه با سه مولفه از نوع Glfloat تعریف کرده و سپس تنها آن آرایه را به تابع تحویل می دهیم ( توجه کنید که نقاط داده شده اگر چه بین -1 و +1 نیستند ولی به طور خودکار به این دوعدد تبدیل می شوند).

  15. جلسه ششم گرافیک کامپیوتری • نحوه اختصاص رنگ ها :: glColor • OpenGL برای رسم رئوس ابتدا باید رنگ رئوس را بداند، تابع عمومی رنگ glColor بصورت زیر می باشد: • glColor{34}(bdfisubusui)V(رنگ مورد نظر) • این تابع می تواند 3 یا 4 پارامتر بپذیرد، نوع 3 پارامتری رنگهای RGB (قرمز، سبز و آبی) را مشخص می کندو پارامتر چهارم میزان شفافیت (Alpha) را مشخص می کند.

  16. جلسه ششم گرافیک کامپیوتری • نحوه اختصاص رنگ ها :: glColor • glColor{34}(bdfisubusui)V(رنگ مورد نظر) • نوع داده های پارامتر های glColor : · b (byte) · d (double) · f (float) · i (integer) · s (short) · ub (unsigned byte) · us (unsigned short) · ui (unsigned integer)

  17. جلسه ششم گرافیک کامپیوتری • نحوه اختصاص رنگ ها :: glColor • glColor{34}(bdfisubusui)V(رنگ مورد نظر) • مثال: • رنگی مایل به زرد با میزان شفافیت 0.2 ایجاد خواهد شد. • رنگ قرمز ( استفاده از نوع آرایه ای اختصاص رنگ) glColor4f(1.0,0.5,1.0,0.2) Glint c[3]={255,0,0}; glColor3i(c);

  18. جلسه ششم گرافیک کامپیوتری • فایل های شاخص در OpenGL • در همه برنامه های گرفیکی لازم است فایل های شاخص را برای کتابخانه هسته OpenGL بگنجانیم. • فایل شاخص روتینهای WGL ویندوز • #include <windows.h> • #include <GL/gl.h> • #include <GL/glu.h> • فایل شاخص ماکروهای مورد نیاز پنجره های مایکروسافت • #include <GL/glut.h> • اگر از GLUT برای مدیریت پنجره استفاده کنیم نیازی به گنجاندن gl.h و glu.h نخواهد بود

  19. جلسه ششم گرافیک کامپیوتری • فایل های شاخص در OpenGL • فایل های شخصی که لازمه کد C++ هستند • در استاندارد ANSI برای C++ این فایلهای شاخص بنام cstdio ، Cstdlib و cmath نامیده می شود. • #include <stdio.h> • #include <stdlibl.h> • #include <math.h>

  20. جلسه ششم گرافیک کامپیوتری • بلاک های دستور OpenGL • وقتی می خواهید شکلی را ایجاد کنید بایستی آن را در بلاکهای دستور OpenGL که با glBegin( ) و glEnd( ) مشخص می شود قرار دهید. • ابتدا رنگ شکل مورد نظر را خارج از بلاک تعیین می کنید. • سپس با استفاده از glBegin( ) و ارسال پارامتر مربوطه نوع شکل را مشخص می کنید. • سپس رئوس شکل را در داخل بلاک قرار می دهیم. • در انتها بلاک را با glEnd می بندید.

  21. جلسه ششم گرافیک کامپیوتری • رسم اشکال ساده دو بعدی • نقطه، خط، مثلث، چهار ضلعی و چند ضلعی ( گسسته و پیوسته) • رسم نقطه (GL_POINTS): • نتیجه: یک نقطه کوچک صورتی رنگ در ربع چهارم صفحه مختصات. glColor3f(1.0, 0.0,1.0); glBegin(GL_POINTS); glVertex2f(2.0,-0.5); glEnd;

  22. جلسه ششم گرافیک کامپیوتری • رسم اشکال ساده دو بعدی :: رسم نقطه (GL_POINTS) • glPointSize : این تابع اندازه نقاط بزرگ می کند( حداکثر 64) • GL_POINT_SMOOTH : شکل نقطه را از حالت مربع پیکسلی به شکل دایره ای تبدیل می کند. 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)

  23. جلسه ششم گرافیک کامپیوتری • رسم اشکال ساده دو بعدی :: رسم نقطه (GL_POINTS) • برای رسم چند نقطه می توان از چندین بلاگ استفاده کرد که تنها وقت و خوانایی برنامه را ازبین می ببرد.

  24. جلسه ششم گرافیک کامپیوتری • رسم اشکال ساده دو بعدی • تست: سه نقطه با فاصله های متساوی در طول یک خط مستقیم دو بعدی با ضریب زاویه 2 رسم شده اند. • الف) توابع OpenGL را برای رسم این سه نقطه بصورت عادی بنویسید. • ب) توابع OpenGL را برای رسم این سه نقطه بصورت آرایه بنویسید. Y 200 150 100 50 X 50 100 150

  25. جلسه ششم گرافیک کامپیوتری • رسم اشکال ساده دو بعدی :: حل تمرین • ب: • الف: Int point1 [ ] = { 50, 100 } ; Int point2 [ ] = { 75, 150 } ; Int point3 [ ] = { 100, 200 } ; glBegin (GL_POINTS ) ; glVertex2i ( 50, 100 ) ; glVertex2i ( 75, 150 ) ; glVertex2i (100, 200) ; glEnd ( ) ; glBegin ( GL_POINTS ) ; glVertex2iv ( point1) ; glVertex2iv (point2 ) ; glVertex2iv ( point3 ) ; glEnd ( ) ;

  26. جلسه ششم گرافیک کامپیوتری • رسم خط در OpenGL :: (GL_LINES) • رسم پاره خط های جدا از هم ( GL_LINES ) • رسم خطوط به هم پیوسته با دو سر انتهایی باز (GL_LINE_STRIP) • رسم خطوط به هم پیوسته با دو سر انتهایی به هم پیوسته (GL_LINE_LOOP)

  27. جلسه ششم گرافیک کامپیوتری • رسم پاره خط های جدا از هم ( GL_LINES ) • دو راس ابتدایی و انتهایی را در بلوک شروع و پایان OpenGL قرار می دهیم و GL_LINES را بعنوان پارامتر به glBegin قرار می دهیم. • رئوس را می بایست بصورت دوتایی در بلاک شروع و پایان قرار دهیم . glBegin(GL_LINES); glVertex2f(-0.2, -0.5); glVertex2f(0.3, 0.8); glVertex2f(-0.8, -0.8); glVertex2f(0.8, -0.8); glEnd();

  28. جلسه ششم گرافیک کامپیوتری • رسم خطوط پیوسته با دو سر انتهایی باز ( GL_LINE_STRIP ) • هنگامی که بیش از دو راس در بلوک آغاز و پایان قرار می گیرد راس آغازین بعدی را به آخرین راس پایانی متصل می کند. • با ثابت 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();

  29. جلسه ششم گرافیک کامپیوتری • رسم خطوط پیوسته با دو سر انتهایی به هم بسته ( 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();

  30. جلسه ششم گرافیک کامپیوتری • تغییر عرض خطوط • با استفاده از تابع 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();

  31. جلسه ششم گرافیک کامپیوتری • رسم مثلث در OpenGL :: (GL_TRIANGLES) • انواع مثلث در OpenGL: • مثلث های جدا از هم • مثلث های دو بدو مشترک در یک ضلع • مثلث های مشترک در یک راس واحد

  32. جلسه ششم گرافیک کامپیوتری • مثلث های جدا از هم :: (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();

  33. جلسه ششم گرافیک کامپیوتری • مثلث های دوبه دو مشترک در یک ضلع :: (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();

  34. جلسه ششم گرافیک کامپیوتری • مثلث های مشترک در یک راس واحد :: (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();

More Related