Professional Documents
Culture Documents
Graphics (OpenGL) Session 2
Graphics (OpenGL) Session 2
Graphics (OpenGL) Session 2
الجزء العملي
2 بيانيات
هدف الجلسة
ّ
األولية ) (Primitivesيف .OpenGl ّ
التعرف عىل عنارص الرسم
يعتمد OpenGLنظام اإلحداثيات األيمن ( ،)RHS: Right-Hand Systemحيث يشي المحور xإىل اليمي ،و يشي المحور yإىل األعىل ،و يشي المحور z
إىل خارج الشاشة .مع تقوس أصابع اليد اليمن من المحور xباتجاه المحور ( yعكس اتجاه عقارب الساعة ،)CCWيشي اإلبهام إىل المحور .z
شكل 1
ّ
األولية Primitives العناص
ّ ُ
تعتي العنارص الهندسية األولية (مثل المثلث أو النقطة أو الخط أو المضلع) مدخالت أنظمة عرض الرسوميات.
يدعم OpenGLثالث فئات من العنارص األ ّ
ولية الهندسية :النقاط Verticesوالخطوط Linesوالمضلعات المغلقة .Polygons
يتم تحديد العنارص األ ّ
ولية عي مجموعة من النقاط ،Verticesويرتبط بكل نقطة مجموعة سمات attributesمثل الموضع واللون والناظم
الطبيع normalواإلكساء.
ي
عشة عنارص أولية كما هو موضح بالشكل ( 2التعتي العنارص مثل الكرة والمكعب والهرم عنارص ّ
أولية). يدعم OpenGLر
ّ
الهندسية :Geometric Primitives األوليات
ّ
األولية مثل المثلث والمرب ع والمستقيم والنقطة ،وأي عنرص ّ
الهندسية يمكن بناء أي غرض ب OpenGlباإلعتماد عىل مجموعة من العنارص
أوىل بدوره يتألف من نقطة أو أكي.
ي
الن يتألف منها باستخدام التابع glVertexضمن زوج األوامر . glBegin, glEnd
هندس بتحديد النقاط ي
ي يتم بناء عنرص
ُ ّ
الهندس مثلGL_POINTS, GL_LINES, GL_QUADS, :
ي ضمن األمر glBeginنحدد نمط الغرض
.GL_TRIANGLES, and GL_POLYGON
ّ ُ ّ ً
متتالية تشكل مثلث. مثال من أجل النمط GL_TRIANGLESكل ثالثة نقاط
ّ ّ ّ
الهندسية مثل الدوران. يتم عادة تحديد قيم النقاط باستخدام الفاصلة العائمة ألن العدد الصحيح غي مناسب عندإجراء التحويالت
ُ
التالية سوف تأخذ نفس اللون ،ويجب مالحظة أن اللون باإلضافة إىل مجموعة أخرى من الخصائص ت ّ ّ
طبق عىل عند تحديد اللون ،كل النقاط
النقاط.
شكل 2
2
Color اللون
ّ
.)clearing الخلفية (أو المسح لتحديد لونglClearColor األمام (الواجهة) و لتحديد اللونglColor نستخدم التابع
ي
ّ ً
[0.0, 1.0] عادة ُيحدد اللون كقيمة فاصلة عائمة ضمن المجال-
Alpha يتم استخدام،RGB (Red-Green-Blue) or RGBA (Red-Green-Blue-Alpha) إما باستخدام المكونات-
ً لألغراض الشفافة0=alpha حيث،لتحديد نسبة الشفافية
. لألغراض المعتمة1=alpha تماما و
ّ
OpenGl تطبق األلوان يف،التالية سوف تأخذ قيمة هذا اللون جميع النقاط،عند تحديد لون األغراض أو لون الواجهة -
ّ ُ ّ ّ
.) المكونة لهvertices( الهندس من ألوان النقاط
ي ويتشكل لون الشكل،األولية عىل النقاط وليس عىل األشكال
/* Handler for window-repaint event. Call back when the window first appears and
whenever the window needs to be re-painted. */
void lineSegment () {
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
/* Main function */
int main(int argc, char** argv) {
glutInit(&argc, argv); // Initialize GLUT
glutCreateWindow("Vertex, Primitive & Color"); // Create window with the given title
glutInitWindowSize(320, 320); // Set the window's initial width & height
glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
3
glutDisplayFunc(lineSegment); // Register callback handler for window re-paint event
init(); // Our own OpenGL initialization
glutMainLoop(); // Enter the event-processing loop
return 0;
}
ّ رسم بعض األوليات الهند:2مثال
سية
void display() {
glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer with current clearing color
4
;)glVertex2f(0.6f, -0.9f
;)(glEnd
البنامج:
بعض تفاصيل ر
ه تهيئة :GLUT ً
نظرا ألننا نستخدم ، OpenGL Utility Toolkitفإن خطوتنا األوىل ي
يوفر GLUTأدوات مساعدة عالية المستوى لتبسيط برمجة ،OpenGLخاصة عند التفاعل مع نظام التشغيل (مثل إنشاء نافذة والتعامل مع
مدخالت لوحة المفاتيح والماوس):
)void glutInit(int *argc, char **argv
يقوم بتهيئة ، GLUTويجب استدعاؤه قبل وظائف GL / GLUTاألخرى .يأخذ نفس وسطاء مثل .main
بعد ذلك ،يتم إنشاء نافذة العرض عىل الشاشة مع تسمية ر
لشيط العنوان:
;)"glutCreateWindow ("An Example OpenGL Program
يجب أن يكون هذا اإلستدعاء األخي ضمن الينامج ،والذي يعرض الرسوميات ويضع الينامج يف حلقة ال نهائية تتحقق من مدخالت األجهزة
مثل الماوس أو لوحة المفاتيح.
ً
تفاعليا ،لذا سيستمر الينامج يف عرض الرسوميات حن نغلق نافذة العرض. هذا المثال ليس
تهيئة لمرة واحدة )( init
تم تصميم هذا التابع لتنفيذ مهام تهيئة OpenGLلمرة واحدة ،مثل تعيي لون المسح ( .)clearingيتم استدعاء initمرة واحدة يف التابع
يس .mainالرئ ي
5
ُ ّ
المحدد ،نحتاج إىل استدعاء تابع :OpenGL لعرض لون النافذة
;)glClear (GL_COLOR_BUFFER_BIT
ّ
الثانية ... نهاية الجلسة
6