Skip to content

LeahShl/SababotGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

פרוייקט סיום בקורס גרפיקה ממוחשבת (ממ"ן 17)

עם החלטתי לשחרר לפומבי את הפרוייקט שכתבתי במסגרת קורס גרפיקה ממוחשבת באוניברסיטה הפתוחה, עולה הצורך להסביר את הפרוייקט למי שאינם מכירים את הקורס אבל עדיין רוצים לעיין בפרוייקט. החומר הנלמד בקורס כולל בסיס אלגוריתמי לגרפיקה ממוחשבת קלאסית וגם מטלות תכנות הנכתבות באמצעות הספריות OpenGL, Glu ו-glut. החומר הנלמד לא כולל שימוש ב-shaders, אלא בסגנון המקביל לזה המתואר ב"ספר האדום" שבלינק הזה. הערה נוספת - הקורס נלמד עם דוגמאות תכנות ב-C++ כאשר דרישת קדם לקורס היא ידיעת שפת C, מתוך הנחה שמי שיודע C יוכל להבין כיצד להשתמש ב-C++. אי לכך, הקוד בפרוייקט הזה סובל ממשבר זהות והוא מריח כמו קוד C++ שנכתב על ידי מתכנתת C שאלתרה כל הדרך.

תיאור הפרוייקט: SababotGL

main screenshot

דרישות הפרוייקט

בפרוייקט הסיום נדרשתי לבנות רובוט ב-OpenGL שהמשתמש יכול לשלוט בו. הרובוט נמצא בעולם תלת-ממדי המכיל רצפה, כמה עצמים שונים, תאורה סביבתי ולפחות מקור אור אחד. מבין הפיצ'רים שנתבקשתי להוסיף לפרוייקט נמנים:

  • הרובוט צריך להזיז את הראש שלו למעלה, למטה ולצדדים.
  • הרובוט צריך לנוע במרחב.
  • לרובוט יש זרוע תלת מפרקית בה כל המפרקים ניתנים להזזה.
  • כל האובייקטים בסצנה מורכבים מחומרים שונים, בעלי תכונות שונות. חומר אחד לפחות צריך להיות מתכתי, הרצפה צריכה להיות מבריקה.
  • ניתן לשנות את מיקום המצלמה וגם להחליף בין מצלמה חיצונית (third-person) לבין צפיה מנקודת מבטו של הרובוט (first-person).
  • ניתן לשנות את מיקום מקורות האור ועצמת ההארה.

תיאור הפרוייקט שלי

סבבוטGL הוא רובוט בעל זרוע אחת שגר בחדר עם שולחן וכיסא. הוא לא זקוק לכיסא, לאוכל ולשתיה אבל הוא אוהב לארח ולכן הוא מחזיק בחדרו גם קנקן תה מקרר ופח אשפה. סבבוטGL יודע להזיז את כל שלושת מפרקי הזרוע שלו ולהתגלגל בחדרו, והוא מזמין את המשתמש להביט בטבלת המקשים כדי ללמוד איך להזיזו.

ניתן להזיז גם את המצלמה כדי לשנות זווית ראיה על ידי לחיצה על F4. המצלמה תמיד מצביעה על מרכז החדר. אפשר להחליף את זווית הראיה לזווית הראיה של סבבוטGL ולראות את העולם דרך עיניו באמצעות לחיצה על F3. במקרה זה מצב ההזזה יחזור באופן אוטומטי למצב הזזת רובוט. לחיצה נוספת על F3 תחזיר את זווית הראיה למצלמה החיצונית. מצב הזזה נוסף הוא מצב הזזת תאורה שניתן להגיע אליו על ידי לחיצה על F5. אפשר להגביר ולהחליש את עוצמת האור, להזיז את מקור האור ולשנות את הכיוון שלו. כדי לחזור למצב ההזזה המקורי, מצב הזזת רובוט, יש ללחוץ על F2.

מומלץ לעבור על הפרוייקט בסדר הזה:

  1. קריאת הקובץ הזה במלואו

  2. קמפול והרצת הפרוייקט לפי השלבים המתוארים בסוף הקובץ הזה

  3. קריאת הקוד בסדר הבא:

    א. main.cpp

    ב. sababot.h

    ג. sababot.cpp

קבצים

קבצי הפרוייקט נמצאים בתיקיה SababotGL שנמצאת בתיקיה mmn17 שבריפו זה.

  • Main.cpp – מכיל את פונקציית הריצה ופונקציות נוספות שקשורות לריצה.
  • sababot.cpp – מכיל את הפונקציות המציירות ומשנות את הסצנה ומשתנים של הסצנה.
  • Sababot.h – מכיל את הקבועים של הסצנה והצהרות לפונקציות.
  • stb_image.h – ספריה נוספת לצורך טעינת תמונות לטקסטורות.
  • textures – תיקיה המכילה את הטקסטורות שבשימוש בפרוייקט.
  • screenshots – תיקיה המכילה צילומי מסך מתוך התוכנית.

הרצת הפרוייקט

יש לקמפל את sababot.cpp לפני main.cpp.

מומלץ עם תחילת הריצה ללחוץ F1 ולצפות בתפריט העזרה. תפריט העזרה הוא מעט שקוף כך שניתן ללחוץ על המקשים תוך כדי צפיה בתפריט ולראות כיצד הסצנה משתנה. לשם פשטות השימוש והקריאה, תפריט העזרה הוא לא טקסטואלי אלא ויזואלי ולכן בתפריט מופיעים המקשים עליהם ניתן ללחוץ אך הושמטו הפרטים המדוייקים.

גוף הרובוט זז באופן זהה לאופן התזוזה במשחקי ירי בגוף ראשון (first person shooter) – סיבוב (strafe) ותזוזה קדימה או אחורה. זה קצת פחות אינטואיטיבי כאשר המצלמה נמצאת מול הרובוט, אבל מאוד נוח כאשר המצלמה נמצאת מאחורי הרובוט או כאשר נכנסים למצב גוף ראשון (F3). התנועה הזאת טבעית יותר ומזכירה תנועה של בני אדם.

הראש והמפרקים של הרובוט זזים באופן דומה יחסית לתזוזה של מפרקים אנושיים. למשל, המרפק ניתן רק לקיפול ולפתיחה, בדומה למרפק אנושי. “כף היד" של הרובוט אינה בסגנון אנושי ויכולה להסתובב 360 מעלות לכל כיוון.

תזוזת המצלמה (F4) ממומשת כך שלמשתמש יהיה טבעי ונוח להזיז אותה. המצלמה תמיד מביטה למרכז הסצנה וניתן לסובב אותה סביב הסצנה (pan), ניתן לבצע זום אין או זום אאוט וניתן להגביה או להנמיך את המצלמה.

תזוזת מיקום וכיוון התאורה (F5) ממומשת באמצעות הזזה פשוטה לאורך שלושת הצירים. מומלץ להרחיק את המצלמה מהסצנה כדי לראות את האפקט של הזזת התאורה.

לחיצה על הלחצן הימני של העכבר תוביל לתפריט העכבר, שם ניתן למצוא גישה נוספת לתפריט העזרה, גישה לתפריט שינוי תאורת רקע וכפתור יציאה מהתוכנית.

טבלת מקשים

תפריטים

מקש פעולה הערות
RIGHT-CLICK פתיחת תפריט עכבר
יציאה מתפריט עכבר לחיצה על הלחצן השמאלי של העכבר מחוץ לתפריט
F1 צפיה ב-help לחיצה נוספת על F1 תצא מ-help
פתיחת adjust ambient רק דרך תפריט עכבר
ESC סגירת adjust ambient

רובוט

מקש פעולה הערות
F2 מצב הזזת רובוט
D הזזת ראש רובוט ימינה
A הזזת ראש רובוט שמאלה
W הזזת ראש רובוט למעלה
S הזזת ראש רובוט למטה
RIGHT הזזת רובוט ימינה
LEFT הזזת רובוט שמאלה
UP הזזת רובוט קדימה
DOWN הזזת רובוט אחורה
H הזזת מפרק כתף ימינה
F הזזת מפרק כתף שמאלה
T הזזת מפרק כתף קדימה
G הזזת מפרק כתף אחורה
J קיפול מרפק פנימה
U מתיחת מרפק החוצה
I סיבוב כף היד פנימה
K סיבוב כף היד החוצה

מצלמה

מקש פעולה הערות
F3 החלפת נקודת מבט החלפה בין מצלמה חיצונית לבין first-person view
F4 מצב הזזת מצלמה
UP זום אין
DOWN זום אאוט
RIGHT סיבוב מצלמה ימינה
LEFT סיבוב מצלמה שמאלה
PAGE DOWN הנמכת מצלמה
PAGE UP הגבהת מצלמה

תאורה

מקש פעולה הערות
F5 מצב הזזת מקור אור
RIGHT הזזת מקור האור X+
LEFT הזזת מקור האורX-
UP הזזת מקור האור למעלה
DOWN הזזת מקור האור למטה
END הזזת מקור האור Z+
HOME הזזת מקור האור Z-
D הזזת כיוון האור X+
A הזזת כיוון האורX-
W הזזת כיוון האור למעלה
S הזזת כיוון האור למטה
E הזזת כיוון האור Z+
Q הזזת כיוון האור Z-
R הגברת עוצמת אור
F הנמכת עוצמת אור

צילומי מסך מתוך הפרוייקט

screenshot 1 screenshot 2 screenshot 3 screenshot 4 screenshot 5 screenshot 6 screenshot 7

About

A project for a computer graphics university course

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published