איך מכינים קוביה באופנגל?

סובב את הקוביה ב -180 מעלות סביב ציר ה- y ותרגם את הקוביה ב -1,1 לאורך ציר ה- X
הוסף את הפקודות הבאות כדי לשנות את קנה המידה של הקוביה ב -2 לאורך ציר ה- x, 2 לאורך ציר ה- y, סובב את הקוביה ב -180 מעלות סביב ציר ה- y ותרגם את הקוביה ב -1,1 לאורך ציר ה- X.

OpenGL הוא כלי תכנות תלת ממדי רב עוצמה המשמש לציור סצנות תלת מימד מורכבות מפרימיטיבים פשוטים. מאמר זה ילמד אתכם כיצד לצייר קוביה פשוטה שתוכלו להסתובב כדי להציג בתלת מימד!

לפרויקט זה תזדקק לעורך קוד וידע מסוים בתכנות C.

חלק 1 מתוך 3: התקנה ראשונית

  1. 1
    התקן את opengl כדי להתחיל בצע את השלבים הבאים להתקנת opengl במערכת שלך. אם כבר התקנת OpenGL, כמו גם מהדר C תואם, תוכל לדלג על שלב זה ולעבור לשלב הבא.
  2. 2
    צור את המסמך. צור קובץ חדש בעורך הקוד המועדף עליך ושמור אותו כ- mycube.c
    התקן את opengl כדי להתחיל בצע את השלבים הבאים להתקנת opengl במערכת שלך
    התקן את opengl כדי להתחיל בצע את השלבים הבאים להתקנת opengl במערכת שלך.
  3. 3
    הוסף # כולל. אלה הם בסיסי כולל תצטרך עבור התוכנית שלך. חשוב להבין שיש למעשה כלולים שונים הנדרשים עבור מערכות ההפעלה השונות. הקפד לכלול את כל אלה כדי להבטיח שהתוכנית שלך תהיה תכליתית ויכולה לפעול עבור כל משתמש.
    // כולל # כלול <stdio.h> # כלול <stdarg.h> # כלול <מתמטיקה.ה> # הגדר GL_GLEXT_PROTOTYPES #ifdef _APPLE_ # כלול <GLUT / glut.h> #else # כלול <GL / glut.h> # endif 
  4. 4
    הוסף אבות טיפוס של פונקציות ומשתנים גלובליים. הצעד הבא שלך הוא להכריז על כמה טיפוסי פונקציה.
    // פונקציות אב טיפוס לתצוגה בטלה (); חלל specialKeys (); // משתנים גלובליים rotate_y כפול = 0; rotate_x כפול = 0; 
  5. 5
    הגדר את הפונקציה הראשית ().
    • int main (int argc, char * argv []) {// אתחל את GLUT ועבד פרמטרים של משתמשים glutInit (& argc, argv); // בקש חלון צבע אמיתי שנאגר כפול עם Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    • הצהרה זו קובעת את הסביבה שלך. דבר גדול שיש לזכור בעת כתיבת תוכניות OpenGL הוא שעליך לבקש הכל. זה מחייב אותך להבין טוב יותר איך התוכנית שלך עובדת ומה אתה צריך לכלול כדי לקבל את הפונקציונליות הרצויה. בשורה זו, תקבע את התצוגה עם חציצה כפולה, צבע RGB ומאגר Z.
    • חציצה כפולה היא טכניקה המשמשת בתוכניות גרפיות כדי למנוע בעיה שנוצרת עקב אופן ציור התמונות למסך. בכל פעם שאתה מצייר מחדש את הסצנה, תחילה יש למחוק את התצוגה ואז לצייר את המידע החדש. ללא חציצה כפולה תוכלו לצפות באפקט מהבהב כאשר המסך נמחק ומצויר שוב ושוב.
    • בעיה זו קבוע על ידי הוספת חיץ שני לצייר כדי. בשיטה זו, תמונה נמשכת למאגר הראשון ומאגר זה מוצג בפניך. המסגרת הבאה תימשך למאגר השני וכאשר זה יסתיים, שני המאגרים יחליפו מקומות. תראה מיד את המאגר השני, אך, מוסתר מאיתנו, המאגר הראשון נמחק ומצויר מחדש עם המסגרת השלישית שתוחלף בסיום.
    • אתה גם רוצה להפעיל את מערכת הצבעים RGB בחלון שלך.
    • Z-buffering הוא איך אתה מקבל את האפקטים התלת ממדיים שאתה רוצה. OpenGL משתמש במערכת קואורדינטות תלת מימדית עם צירי x, y ו- z. כדי לתת את האפקט שאובייקט קרוב יותר אליך מיקוםו על ציר z גדל, אולם כדי לגרום לו להיראות רחוק יותר, מיקומו על ציר z מצטמצם.
  6. 6
    צור את החלון. השלב הבא הוא ליצור את החלון שבתוכו תצייר את הקוביה. במדריך זה, החלון נקרא "קוביה מדהימה".
    // צור חלון glutCreateWindow ("קובייה מדהימה"); 
  7. 7
    אפשר בדיקת עומק. OpenGL היא שפה קפדנית בכך שהיא אינה מניחה שתכונות מיוחדות מופעלות. כדי שהתוכנית שלך תוצג כראוי בתלת מימד באמצעות מאגר Z שעליו הסתכלת קודם, עליך לאפשר בדיקת עומק. כאשר אתה ממשיך לחקור את OpenGL, תגלה תכונות רבות שתצטרך לאפשר, כולל תאורה, טקסטורות, פונה אל מול ועוד.
    // הפעל את מבחן עומק ה- Z-buffer glEnable (GL_DEPTH_TEST); 
    מאמר זה ילמד אתכם כיצד לצייר קוביה פשוטה שתוכלו להסתובב כדי להציג בתלת מימד
    מאמר זה ילמד אתכם כיצד לצייר קוביה פשוטה שתוכלו להסתובב כדי להציג בתלת מימד!
  8. 8
    הוסף פונקציות להתקשרות חוזרות. להלן פונקציות החזרה שעליהן כתבת את אבות הטיפוס קודם לכן. בכל פעם דרך הלולאה הראשית, פונקציות אלה ייקראו. פונקציית התצוגה משרטטת מחדש את הסצנה על בסיס כל שינוי במשתנים שבוצעו מאז השיחה הקודמת. הפונקציה specialKeys מאפשרת לנו לתקשר עם התוכנית.
    // פונקציות Callback glutDisplayFunc (תצוגה); glutSpecialFunc (specialKeys); 
  9. 9
    התחל את המסלול הראשי. פעולה זו תזכור את הפונקציה העיקרית עד שתסגור את התוכנית כדי לאפשר אנימציות ואינטראקציה של המשתמש.
    // העבר את השליטה ל- GLUT לאירועים glutMainLoop (); // חזרה למערכת ההפעלה חזרה 0; } 

חלק 2 מתוך 3: פונקציית התצוגה ()

  1. 1
    הבן את מטרת הפונקציה הזו. כל עבודת ציור הקוביה תעשה בפונקציה זו. הרעיון הכללי מאחורי הקוביה שלך הוא לצייר את כל ששת הצדדים בנפרד ולהציב אותם במיקום המתאים.
    • מבחינה רעיונית, כל צד הולך להיות מצויר על ידי הגדרת ארבע הפינות ומאפשר ל- OpenGL לחבר את הקווים ולמלא אותו בצבע שאתה מגדיר. להלן השלבים לביצוע פעולה זו.
  2. 2
    הוסף glclear (). הצעד הראשון שעליך לנקוט בפונקציה זו הוא לנקות את מאגר צבע Z. ללא שלבים אלה, הרישומים הישנים עדיין עשויים להיות גלויים מתחת לשרטוטים החדשים וחפצים שצוירו לא יהיו במקום הנכון על המסך.
    חלל תצוגה () {// נקה מסך ו- Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
  3. 3
    הוסף glbegin () ו glend (). OpenGL מגדיר אובייקטים כשילובים של מצולעים שונים. באמצעות הפקודה glBegin () אתה מניח למעשה עיפרון שיצייר צורה. כדי להרים את העיפרון ולהתחיל צורה חדשה, עליך להשתמש בפקודה glEnd (). במדריך זה תשתמשו ב- GL_POLYGON כדי לצייר כל צד של הקוביה, אך ניתן להשתמש באפשרויות פרמטר אחרות כגון GL_LINE, GL_QUAD או GL_TRIANGLE כדי ליצור צורות אחרות.
    • כאן תתחיל עם החלק הקדמי של הקוביה שלך. בהמשך תוסיף צבע לכל 6 הצדדים.
    • // צד רב צבעוני - FRONT glBegin (GL_POLYGON); // קודקודים יתווספו בשלב הבא glEnd (); 
    הרעיון הכללי מאחורי הקוביה שלך הוא לצייר את כל ששת הצדדים בנפרד ולהציב אותם במיקום המתאים
    הרעיון הכללי מאחורי הקוביה שלך הוא לצייר את כל ששת הצדדים בנפרד ולהציב אותם במיקום המתאים.
  4. 4
    הוסף glvertex3f (). לאחר שהצהרת שאתה רוצה להתחיל את המצולע שלך, עליך להגדיר את קודקודי האובייקט. ל- glVertex יש מספר צורות, תלוי מה אתה רוצה לעשות עם האובייקט שלך.
    • הראשון הוא בכמה ממדים אתה עובד. 3 לעיל ב- glVertex3f אומר שאתה מצייר בתלת מימד. אפשר גם לעבוד ב -2 או 4 מימדים. ה- f לעיל ב- glVertex3f אומר שאתה עובד עם מספרי נקודה צפה. ניתן גם להשתמש במכנסיים קצרים, מספרים שלמים או זוגות.
    • שימו לב שנקודות אלה מוגדרות נגד כיוון השעון. זה לא מאוד חשוב כרגע, אבל כאשר אתה מתחיל לעבוד עם תאורה, מרקמים ופנים עם ספיגה, זה יהפוך לחשוב להפליא, אז הרגל להגדיר את הנקודות שלך נגד כיוון השעון עכשיו.
    • הוסף הוסף את הקודקודים בין הקווים glBegin () ו- glEnd ().
    • // צד רב צבעוני - FRONT glBegin (GL_POLYGON); glVertex3f (-0,5, -0,5, -0,5); // P1 glVertex3f (-0,5, 0,5, -0,5); // P2 glVertex3f (0,5, 0,5, -0,5); // P3 glVertex3f (0,5, -0,5, -0,5); // P4 glEnd (); 
  5. 5
    הוסף את glcolor3f (). glColor עובד בצורה דומה ל- glVertex. אתה יכול להגדיר נקודות כמו מכנסיים קצרים, מספרים שלמים, זוגות או צף. לכל צבע יש ערך מ- 0 עד 1. כל ה- 0 הופכים את הנקודה לשחורה וכל ה- 1 יהפכו את הנקודה לבנה. ה- 3 ב- glColor3f () מתייחס למערכת הצבעים RGB ללא ערוץ אלפא. האלפא של צבע מגדיר את השקיפות שלו. כדי לשנות את רמת האלפא, השתמש ב- glColor4f () כאשר הפרמטר האחרון הוא ערך 0 עד 1 כדי שיהיה אטום לשקוף.
    • כשאתה קורא ל- glColor3f () כל קודקוד הנמשך מאותה נקודה ואילך יהיה בצבע זה. לכן, אם אתה רוצה שכל ארבעת הקודקודים יהיו אדומים, פשוט הגדר את הצבע פעם אחת בכל עת לפני הפקודות glVertex3f () וכל הקודקודים יהיו אדומים.
    • הצד הקדמי המוגדר להלן מראה כיצד להגדיר צבע חדש לכל קודקוד. כשתעשה זאת, תוכל לראות מאפיין מעניין של צבעי OpenGL. מכיוון שלכל קודקוד המצולע יש צבע משלו, OpenGL ישלב באופן אוטומטי את הצבעים! השלב הבא יראה כיצד להקצות ארבעה קודקודים באותו צבע.
    • // צד רב צבעוני - FRONT glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); // P1 הוא glColor3f אדום (0,0, 1,0, 0,0); glVertex3f (0,5, 0,5, -0,5); // P2 הוא glColor3f ירוק (0,0, 0,0, 1,0); glVertex3f (-0,5, 0,5, -0,5); // P3 הוא glColor3f כחול (1,0, 0,0, 1,0); glVertex3f (-0,5, -0,5, -0,5); // P4 הוא סגול glEnd (); 
  6. 6
    לטפל בצדדים האחרים. בדוק מה יהיה המיקום של כל קודקוד עבור חמשת הצדדים האחרים של הקוביה, אך למען הפשטות, אלה חושבו עבורך ונכללים בפונקציית התצוגה הסופית () למטה.
    • // צד לבן - BACK glBegin (GL_POLYGON); glColor3f (1,0, 1,0, 1,0); glVertex3f (0,5, -0,5, 0,5); glVertex3f (0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glEnd (); // צד סגול - RIGHT glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 1,0); glVertex3f (0,5, -0,5, -0,5); glVertex3f (0,5, 0,5, -0,5); glVertex3f (0,5, 0,5, 0,5); glVertex3f (0,5, -0,5, 0,5); glEnd (); // הצד הירוק - LEFT glBegin (GL_POLYGON); glColor3f (0,0, 1,0, 0,0); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); // הצד הכחול - TOP glBegin (GL_POLYGON); glColor3f (0,0, 0,0, 1,0); glVertex3f (0,5, 0,5, 0,5); glVertex3f (0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, 0,5); glEnd (); // הצד האדום - תחתון glBegin (GL_POLYGON); glColor3f (1,0,0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); glVertex3f (0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); glFlush (); glutSwapBuffers (); } 
    • אנו רוצים להוסיף שתי שורות קוד אחרונות לפונקציה זו. אלה הם glFlush (); ו- glutSwapBuffers (); אשר נותנים לנו את האפקט המאגר כפול שלמדתם עליו קודם.

חלק 3 מתוך 3: אינטראקטיביות של משתמשים

  1. 1
    הוסף מקשים מיוחדים (). כמעט סיימת אבל כרגע אתה יכול לצייר קוביה אבל אין לך שום דרך לסובב אותה. לשם כך תיצור פונקציה specialKeys () שתאפשר לנו ללחוץ על מקשי החצים ולסובב את הקוביה!
    • פונקציה זו הסיבה שהכרזת על המשתנים הגלובליים rotate_x ו- rotate_y. כשתלחץ על מקשי החצים ימינה ושמאלה, rotate_y יוגדל או יופחת ב -5 מעלות. באופן דומה, כאשר תלחץ על מקשי החצים למעלה ולמטה, rotate_x ישתנה בהתאם.
    • void specialKeys (int key, int x, int y) {// חץ ימינה - הגדל את הסיבוב ב -5 מעלות אם (key == GLUT_KEY_RIGHT) rotate_y + = 5; // חץ שמאל - הפחת את הסיבוב ב -5 מעלות אחרת אם (מפתח == GLUT_KEY_LEFT) rotate_y - = 5; אחרת אם (מפתח == GLUT_KEY_UP) rotate_x + = 5; אחרת אם (מפתח == GLUT_KEY_DOWN) rotate_x - = 5; // בקש עדכון תצוגה glutPostRedisplay (); } 
  2. 2
    הוסף גלוטט (). ההצהרה האחרונה שלך היא להוסיף את ההצהרה שתסובב את האובייקט שלך. חזור לפונקציית display () ולפני הצד הקדמי הוסף שורות אלה:
    • // אפס טרנספורמציות glLoadIdentity (); // סובב כאשר המשתמש משנה את rotate_x ואת rotate_y glRotatef (rotate_x, 1,0, 0,0, 0,0); glRotatef (rotate_y, 0,0, 1,0, 0,0); // צד צבעוני - קדמי.... 
    • שים לב תחילה כי התחביר של glRotatef () דומה לזה של glColor3f () ו- glVertex3f () אך תמיד דורש 4 פרמטרים. הפרמטר הראשון הוא מידת הסיבוב המיושמת. שלושת הפרמטרים הבאים מגדירים על איזה ציר להסתובב כאשר הראשון הוא ציר ה- x, השני הוא ציר ה- y והשלישי הוא ציר ה- z. כרגע אתה צריך רק להסתובב סביב ציר ה- x ו- y.
    • כל התמורות שאתה כותב בתוכנית שלך זקוקות לשורות דומות לזה. מבחינה רעיונית, אתה יכול לחשוב על זה כעל סיבוב האובייקט שלך סביב ציר x בכמות שהוגדרה על ידי rotate_x ואז סיבוב סביב ציר y על ידי rotate_y. עם זאת, OpenGL משלב את כל ההצהרות הללו לשינוי מטריצה אחד. בכל פעם שאתה מתקשר לפונקציית התצוגה, אתה בונה מטריצת טרנספורמציה ו- glLoadIdentity () מבטיח שתתחיל עם מטריצה חדשה בכל מעבר.
    • פונקציות השינוי האחרות שתוכלו להחיל הן glTranslatef () ו- glScalef (). פונקציות אלה דומות ל- glRotatef () למעט שהן לוקחות רק 3 פרמטרים, סכומי x, y ו- z כדי לתרגם או לשנות את גודל האובייקט.
    • על מנת לקבל את האפקט הנכון בעת החלת כל שלושת התמורות על אובייקט אחד, עליך ליישם אותן בסדר הנכון. כתוב אותם תמיד בסדר glTranslate, glRotate ואז glScale. OpenGL מיישמת למעשה את השינויים בצורה מלמטה למעלה. כדי להבין זאת נסה לדמיין כיצד תיראה קוביית 1x1x1 פשוטה עם השינויים אם OpenGL יישם אותם מלמעלה למטה ואם OpenGL יישם אותם מלמטה למעלה.
    כיצד אוכל למצוא את הקואורדינטות לקוביה זו
    כיצד אוכל למצוא את הקואורדינטות לקוביה זו?
  3. 3
    הוסף את הפקודות הבאות כדי לשנות את קנה המידה של הקוביה ב -2 לאורך ציר ה- x, 2 לאורך ציר ה- y, סובב את הקוביה ב -180 מעלות סביב ציר ה- y ותרגם את הקוביה ב -1,1 לאורך ציר ה- X. הקפד לסדר את אלה כמו גם את הפקודות הקודמות glRotate () בסדר הנכון כמתואר לעיל. (אם אתה לא בטוח, זה נעשה בקוד הסופי בסוף ההדרכה.)
    // טרנספורמציות אחרות glTranslatef (0,1, 0,0, 0,0); glRotatef (180, 0,0, 1,0, 0,0); glScalef (2,0, 2,0, 0,0); 
  4. 4
    הידור והפעל את הקוד שלך. בהנחה שאתה משתמש ב- gcc כמהדר שלך, הפעל פקודות אלה מהטרמינל שלך כדי להרכיב ולבדוק את התוכנית שלך.
    ב- Linux: gcc cube.c -o קוביה -lglut -lGL./ mycube ב- Mac: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube ב- Windows: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube 
  5. 5
    בדוק את הקוד המלא שלך. זה צריך להיות כך:
    // // קובץ: mycube.c // מחבר: מאט דייזלי // נוצר: 22,5012 // פרויקט: קוד מקור ל- Make a Cube ב- OpenGL // תיאור: יוצר חלון OpenGL ומצייר קוביית תלת מימד // That המשתמש יכול לסובב באמצעות מקשי החצים // // פקדים: חץ שמאלה - סובב שמאלה // חץ ימינה - סובב ימינה // חץ למעלה - סובב למעלה // חץ למטה - סובב למטה // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // כולל // - - - - - - - - - - - - - - - - - - - - - - - - - - - # כלול <stdio.h> # כלול <stdarg.h> # כלול <מתמטיקה.ה> # הגדר GL_GLEXT_PROTOTYPES #ifdef _APPLE_ # כלול <GLUT / glut.h> #else # כלול <GL / glut. h> # endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // אב טיפוס של פונקציות // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - תצוגה בטלה (); חלל specialKeys ();// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // משתנים גלובליים // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - סיבוב כפול_y = 0; rotate_x כפול = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // תצוגה () פונקציית התקשרות חוזרת // - - - - - - - - - - - - - - - - - - - - - - - - - - - תצוגה בטלה () {// מסך נקה ו- Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // אפס טרנספורמציות glLoadIdentity (); // טרנספורמציות אחרות // glTranslatef (0,1, 0,0, 0,0); // לא כלול // glRotatef (180, 0,0, 1,0, 0,0); // לא כלול // סובב כאשר המשתמש משנה את rotate_x ואת rotate_y glRotatef (rotate_x, 1,0, 0,0, 0,0); glRotatef (rotate_y, 0,0, 1,0, 0,0); // טרנספורמציות אחרות // glScalef (2,0, 2,0, 0,0); // לא כלול // צד רב צבעוני - FRONT glBegin (GL_POLYGON);glColor3f (1,0, 0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); // P1 הוא glColor3f אדום (0,0, 1,0, 0,0); glVertex3f (0,5, 0,5, -0,5); // P2 הוא glColor3f ירוק (0,0, 0,0, 1,0); glVertex3f (-0,5, 0,5, -0,5); // P3 הוא glColor3f כחול (1,0, 0,0, 1,0); glVertex3f (-0,5, -0,5, -0,5); // P4 הוא סגול glEnd (); // צד לבן - BACK glBegin (GL_POLYGON); glColor3f (1,0, 1,0, 1,0); glVertex3f (0,5, -0,5, 0,5); glVertex3f (0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glEnd (); // צד סגול - RIGHT glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 1,0); glVertex3f (0,5, -0,5, -0,5); glVertex3f (0,5, 0,5, -0,5); glVertex3f (0,5, 0,5, 0,5); glVertex3f (0,5, -0,5, 0,5); glEnd (); // הצד הירוק - LEFT glBegin (GL_POLYGON); glColor3f (0,0, 1,0, 0,0); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5,-0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); // הצד הכחול - TOP glBegin (GL_POLYGON); glColor3f (0,0, 0,0, 1,0); glVertex3f (0,5, 0,5, 0,5); glVertex3f (0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, 0,5); glEnd (); // הצד האדום - תחתון glBegin (GL_POLYGON); glColor3f (1,0, 0,0, 0,0); glVertex3f (0,5, -0,5, -0,5); glVertex3f (0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); glFlush (); glutSwapBuffers (); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // specialKeys () פונקציה להתקשרות חוזרת // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ריק מקשים (מקש int, int x, int y) {// חץ ימינה - הגדל את הסיבוב ב 5 מעלות אם (key == GLUT_KEY_RIGHT) rotate_y + = 5;// חץ שמאל - הפחת את הסיבוב ב -5 מעלות אחרת אם (מפתח == GLUT_KEY_LEFT) rotate_y - = 5; אחרת אם (מפתח == GLUT_KEY_UP) rotate_x + = 5; אחרת אם (מפתח == GLUT_KEY_DOWN) rotate_x - = 5; // בקש עדכון תצוגה glutPostRedisplay (); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - // פונקציית ראשי () // - - - - - - - - - - - - - - - - - - - - - - - - - - - - int main (int argc, char * argv []) {// אתחל את GLUT ותהליך פרמטרים של המשתמש glutInit (& argc, argv); // בקש חלון צבע אמיתי שנאגר כפול עם Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // צור חלון glutCreateWindow ("קובייה מדהימה"); // הפעל את מבחן עומק ה- Z-buffer glEnable (GL_DEPTH_TEST); // פונקציות Callback glutDisplayFunc (תצוגה); glutSpecialFunc (specialKeys); // העבר את השליטה ל- GLUT לאירועים glutMainLoop ();// חזרה למערכת ההפעלה חזרה 0; } 

שאלות ותשובות

  • כיצד אוכל למצוא את הקואורדינטות לקוביה זו?
    נסה למצוא את הקואורדינטות של הכיכר. זה עשוי לעזור, שכן ריבוע הוא דו ממדי ואילו קוביה היא תלת מימד.

FacebookTwitterInstagramPinterestLinkedInGoogle+YoutubeRedditDribbbleBehanceGithubCodePenWhatsappEmail