openGL مقدمه ای بر
Spring 91
چیست ؟ OpenGL
Open Graphic Library
یک کتابخانه جهت دستیابی ساده به سخت افزار گرافیکی
رابط نرم افزاری برای سخت افزار گرافیکی
یک کتابخانه مدل سازی و گرافیک سه بعدی
2
سیر تاریخی
آغاز در دهه 1990 توسط شرکت Silicon Grapihcs
تکمیل توسط ARB (Architecture Review Board).
Microsoft, Intel, ATI, SGI, 3DLabs, Dell, Sun, IBM, NVIDIA
نسخه ی اول توسط شرکتSGI در سال 1992
نسخه ی دوم توسط شرکت 3DLabs
آخرین نسخه 4.2
3
هدف اصلی توسعه
پنهان کردن پیچیدگی کار با سخت افزارهای مختلف گرافیکی با یک رابط سطح پایین
ساده کردن کارهای گرافیکی خصوصا سه بعدی با ایجاد یک رابط استاندارد واحد
4
کتابخانه های مرتبط
AGL, GLX, WGL
GLU (OpenGL Utility Library)
GLUT (OpenGL Utility Toolkit)
5
گرفتن خطاها
6
glGetError:Glenum
glGetError(void);
nst GLubyte* gluErrorString(GLenumerrorCode);
ایجاد و حذف پنجره نمایش
تابع ایجاد پنجره رسم
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
تابع حذف پنجره رسم
GLvoid KillGLWindow(GLvoid)
7
توابع دستوری
glClear(GL_COLOR_BUFFER_BIT);
glBegin();
glEnd();
8
نحوه ی بیان مختصات
9
ایجاد نقطه
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 1.0); // رنگ صورتی
glEnable(GL_POINT_SMOOTH); // نقطه دایره ای
glPointSize(20.0); // اندازه نقطه (تا 64)
glBegin(GL_POINTS);
glVertex2f(0.2, -0.5); // ربع چهارم
glEnd();
10
نحوه ی اختصاص رئوس
اگر نقاط را به صورت تک تک بدهید
glVertex{234}(dfis)((مختصات
:مثال glVertex2f(0.2, -0.5)
اگر نقاط را به صورت آرایه ای بدهید
glVertex{234}(dfis)v((مختصات
11
شکل کلی استفاده از توابع
glVertex{234}(dfis)((مختصات
gl -> openGLاستفاده از کتابخانه
Vertex -> از نوع راس
{234} -> تعداد پارامتر
(dfis) -> نوع پارامتر
12
نوع پارامتر
13
تعداد پارامتر
Vertex2
x, yدوبعدی
Vertex3
x, y, zسه بعدی
Vertex4
سه بعدی ( پارامتر چهارم میزان بزرگنمایی راس )
14
مثال رئوس
glVertex2i(1, -1);
GLfloat v[3] = {1.0, 0.0, 0.7};
glVertex3fv(v);
15
نحوه ی اختصاص رنگ ها
glColor{34}(bdfisubusui)v(رنگ مورد نظر)
{34}
3 -> R G B
4 -> R G B ALPHA
16
نوع داده رنگ
b (byte)
d (double)
f (float)
i (integer)
s (short)
ub (unsigned byte)
us (unsigned short)
ui (unsigned integer)
17
مثال رنگ
glColor4f(1.0, 0.5, 1.0, 0.2);
GLint c[3] = { 1, 0, 0 };
glColor3i(c);
18
رنگ آمیزی – روش اول
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();
19
رنگ آمیزی – روش دوم
glColor3f(0.5f,0.5f,1.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd();
20
رسم اشکال هندسی
21
رسم پاره خط های جدا از هم
glBegin(GL_LINES);
glVertex2f(-0.2, -0.5);
glVertex2f(0.3, 0.8);
glVertex2f(-0.8, -0.8);
glVertex2f(0.8, -0.8);
glEnd();
22
رسم خطوط پیوسته با دو سر انتهایی باز
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();
23
رسم خطوط پیوسته با دو سر انتهایی به هم بسته
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();
24
نحوه ی تغییر عرض خطوط
glLineWidth();
این تابع قبل از glBegin() استفاده میشود
glLineWidth(7.0);
25
رسم مثلث های جدا از هم
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,
glVertex2f(0.4, 0.0);
glEnd();0.5);
26
مثلث های دوبدو مشترک در یک ضلع
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_TRIANGLE_STRIP);
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();
27
رسم چند ضلعی
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_POLYGON);
glVertex2f(-0.7, -0.4);
glVertex2f(-0.7, 0.4);
glVertex2f(-0.4, 0.7);
glVertex2f(0.4, 0.7);
glVertex2f(0.7, 0.4);
glVertex2f(0.7, -0.4);
glVertex2f(0.4, -0.7);
glVertex2f(-0.4, -0.7);
glEnd();
28
چهارضلعی های جدا از هم
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glBegin(GL_QUADS);
glVertex2f(-0.8, 0);
glVertex2f(-0.4, 0.4);
glVertex2f(0.0, 0.0);
glVertex2f(-0.4, -0.4);
glVertex2f(0.9, 0.5);
glVertex2f(0.2, 0.5);
glVertex2f(0.1, 0.0);
glVertex2f(0.8, 0.0);
glEnd();
29
تابع دوران
glRotatef(Angle,Xvector,Yvector,Zvector)
Angle: میزان زاویه گردش شکل
Xvector: میزان دوران در راستای محور X
Yvector: میزان دوران در راستای محور Y
Zvector: میزان دوران در راستای محور Z
30
مختصات 3-بعدی
31
رسم مثلث سه بعدی
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f); // Top (Front)
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f); // Left (Front)
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f); // Right (Front)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top (Right)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Left (Right)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); //Right (Right)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top (Back)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Left (Back)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f, -1.0f); // Right (Back)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top (Left)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f,-1.0f); // Left (Left)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Right (Left)
glEnd();
32
33
قوری
void glutSolidTeapot(GLdouble size); // توپر
void glutWireTeapot(GLdouble size); // توخالی
34
35
منابع
Google site
Wikipedia site
beginning OpenGL Game Programming
Ali ghane
36