Transcript OpenGL
OpenGL
גרפיקה ממוחשבת :מבוא לOpenGL-
1
– OpenGL, GLU, GLUT
התקנה
. מהאתרGlutInstallation.zip הורידו את הקבצים
•
אינה קיימת אזgl לספרייה (אם הספרייהGLUT.H :הוסיפו את הקובץ
:)צרו אותה
•
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl\
: לספריהGLUT32.lib הוסיפו את הקובץ
•
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\
: לספרייהGLUT32.dll :הוסיפו את הקובץ
•
:הסברים נוספים תוכלו למצוא בקישור הבא
•
C:\Windows\System32\
http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Exampl
es/GettingStarted/msvcnetglut.html
2
OpenGL- מבוא ל:גרפיקה ממוחשבת
)OpenGL (Open Graphics Library
• תוכנה שפותחה ע"י Silicon Graphicsב ,1992-המאפשרת גישה לחומרה
הגרפית (.)API
• החומרה הגרפית מכילה יכולות גרפיות רבות :טרנספורמציות ,תאורה ,חומר,
טקסטורה rasterization ,z-buffer ,ועוד.
• מכילה כ 250 -פקודות המאפשרות אפליקציות :גרפיות,
אינטראקטיביות ,תלת-ממדיות.
• ממשק בלתי תלוי בחומרה ומערכת הפעלה ).(cross platform
• אינה מכילה פקודות חלונאות או פקודות קלט מהמשתמש.
• מכילה רק אובייקטים גיאומטריים בסיסיים כגון :נקודה ,ישר ,פוליגון.
גרפיקה ממוחשבת :מבוא לOpenGL-
3
מה ניתן לבצע באמצעות OpenGL
.1בנית אובייקטים תלת-ממדיים מפרמיטיבים גיאומטריים.
.2סידור האובייקטים במרחב ובחירת נקודת מבט.
.3הגדרת חומר ,צבע וטקסטורה עבור האובייקטים.
.4הגדרת תאורה.
.5המרת המודל המתמטי לתמונה.
גרפיקה ממוחשבת :מבוא לOpenGL-
4
)GLU (OpenGL Utility Library
• ספריה הבנויה מעל OpenGLומספקת אפשרויות גיאומטריות
מורכבות יותר ,כגון :עקומי ומשטחי .NURBS
• מכילה פונקציות מעטפת לחלק מפונקציות ,OpenGL
כגון פונקציות צפייה והטלה.
גרפיקה ממוחשבת :מבוא לOpenGL-
5
)GLUT (OpenGL Utility Toolkit
• ערכת כלי פיתוח המאפשרת עבודה עם חלונאות למטרות גרפיקה.
• בלתי תלויה במערכת חלונאות.
• ערכה לכתיבת תוכנית הפועלת לפי מאורעות ).(event driven
• מכילה אובייקטים גיאומטריים מורכבים יותר כגון :ספירה ,טורוס,
וקומקום.
• מתאימה לאפליקציות קטנות המבוססות על .OpenGL
גרפיקה ממוחשבת :מבוא לOpenGL-
6
OpenGL, GLU, GLUT
תוכנית גרפית
GLU
GLUT
מערכת חלונות
OpenGL
חומרה גרפית
גרפיקה ממוחשבת :מבוא לOpenGL-
7
מבנה כללי של תוכנית
main() {
initialize window
// GLUT functions
initialize drawing
// OpenGL and GLUT functions
connect between events and callbacks
// GLUT functions
update window and check for events // GLUT functions
}
)event driven( זרימת התוכנית היא עפ"י מאורעות
8
OpenGL- מבוא ל:גרפיקה ממוחשבת
תוכנית בסיסית
void init)void( { … // Initial definitions of the drawing }
void display)void({ … // definition of all objects to be drawn }
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
}
9
OpenGL- מבוא ל:גרפיקה ממוחשבת
תוכנית בסיסית – אתחול חלון
•
•
•
•
•
– glutInitאתחול GLUT
– glutInitDisplayModeאתחול התצוגה (מודל צבע ,סוג החוצץ)...,
– glutInitWindowSizeאתחול גודל החלון (בפיקסלים)
– glutInitWindowPositionאתחול מיקום החלון (ביחס לפינה השמאלית
עליונה של החלון)
– glutCreateWindowיצירה של חלון (החלון יוצג רק אחרי הפקודה
)glutMainLoop
גרפיקה ממוחשבת :מבוא לOpenGL-
10
תוכנית בסיסית – מנוע ההפעלה
• – glutMainLoopכניסה לתהליך הרצת לולאת המאורעות .החלונות
שהוגדרו יוצגו ,הרינדור שנעשה יצא לפועל ,ותהליך ההאזנה למאורעות יחל.
גרפיקה ממוחשבת :מבוא לOpenGL-
11
תוכנית בסיסית – קישור בין מאורעות לפונקציות
callback
•
•
•
•
•
•
– glutDisplayFuncטיפול בצורך לצייר מחדש ,כלומר ,קישור לפונקצית
ציור
– glutReshapeFuncטיפול בשינוי גודל החלון
– glutKeyboardFuncטיפול בלחיצה על כפתור המקלדת
– glutMouseFuncטיפול בלחיצה על כפתור העכבר
– glutMotionFuncטיפול בתזוזת העכבר
– glutIdleFuncטיפול במקרה שאין מאורעות
גרפיקה ממוחשבת :מבוא לOpenGL-
12
תוכנית בסיסית – ציור
void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); // Select a clear color }
void display(void) {
glClear (GL_COLOR_BUFFER_BIT); /* clear all pixels */
/* draw a white polygon (rectangle) with corners at
(0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) */
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush (); /* don't wait! start processing buffered OpenGL routines */
}
13
OpenGL- מבוא ל:גרפיקה ממוחשבת
תוכנית בסיסית – ציור
•
•
•
•
•
•
– glClearColorהגדרת צבע רקע
– glClearמחיקת החוצץ הגרפי
– glColor3fהגדרת צבע (עבור אובייקטים שיוגדרו אחרי פקודה זו)
– glEnd ,glBeginהגדרת אובייקט
– glVertex3fהגדרת קודקוד של אובייקט
- glFlushהוצאת פקודות הציור לפועל (אחרת התוכנית עלולה להמתין
לפקודות ציור נוספות)
גרפיקה ממוחשבת :מבוא לOpenGL-
14
תוכנית בסיסית – ציור
גרפיקה ממוחשבת :מבוא לOpenGL-
15
תוכנית בסיסית – מכונת מצבים
•
תוכנית ב OpenGL -מתפקדת כמכונת מצבים:
כל פקודה מכניסה את המערכת למצב מסוים .למשל ,הגדרת צבע ()glColor3f
היא תקפה עד להגדרה של צבע חדש.
•
משתני מצב נוספים :תאורה ,חומר ,פרמטרים של מצלמה ,הטלה וכדומה.
•
לכל משתנה מצב יש ערך ברירת מחדל:
– קביעת ערך של משתנה מצב מתבצעת ע"י קריאה לפונקצית OpenGL
מתאימה (מהסוג שמופיע למעלה)
– קריאת ערך של משתנה מצב נעשית ע"י הפונקציה **.glget
•
הפעלה או כיבוי של מצב:
)(glEnable(), glDisable
גרפיקה ממוחשבת :מבוא לOpenGL-
16
תוכנית בסיסית – פונקצית צפייה
{ )void winReshapeFnc (GLint newWidth,GLint newHeight
;)glMatrixMode(GL_PROJECTION
;)(glLoadIdentity
gluOrtho2D(WORLD_MIN_X,WORLD_MAX_X,
;)WORLD_MIN_Y,WORLD_MAX_Y
}
• – gluOrtho2Dמגדיר הטלה דו-ממדית פשוטה (אורתוגרפית) מחלון בעולם
שמימדיו נתונים ע"י הפרמטרים המועברים לפונקציה לבין חלון המסך.
• שלוש הפקודות האלו אחראיות על הגדרת החלון בעולם שיותאם לחלון
במסך.
גרפיקה ממוחשבת :מבוא לOpenGL-
17
תוכנית בסיסית – אנימציה
.)double buffers( הצגת אנימציה 'חלקה' מתבצעת ע"י חוצץ כפול
:לצורך זה צריך להוסיף ולשנות את הפקודות הבאות
int main(int argc, char** argv) {
:
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); // change here
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
:
}
void display(void)
{
:
glFlush();
glutSwapBuffers();
// add here
}
18
OpenGL- מבוא ל:גרפיקה ממוחשבת