דילוג לתוכן

פוסט ראשון

הצגת פרויקט
פיתחתי מנוע רינדור בזמן אמת ב C++ עם OpenGL.

אז מה זה בעצם מנוע רינדור?

מנוע רינדור מהווה אבסטרקציה בשביל לצייר על המסך עצמים. הוא עושה שימוש בכרטיס הגרפי של המחשב - GPU בשביל להמיר לוגיקה (למשל מודל תלת ממדי) לתמונה דו ממדית שאפשר להציג על מסך.

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

מצאתי הרבה אתגרים מעניינים בתחום הפיתוח הגרפי בגלל התעסקות המתמטית (אלגברה לינארית) וגם מבחינה תכנותית יש צורך לכתוב קוד יעיל ואופטימלי ולכן גם לרוב מפתחים מנועים בשפות מהירות “ונמוכות” כמו C++.

מעבר למנוע או לסט יכולות הבסיסי שהוא תומך בהן, פיתחתי באמצעותו סצנה/משחקון, סוג של מבוך בעולם תלת מימדי עם עצמים שדרכם אי אפשר לעבור.
ועל אותו עולם הפעלתי אלגוריתם A* (אי סטאר) למציאת הנתיב הקצר ביותר בין שתי נקודות.
האלגוריתם הוא הרחבה של האלגוריתם של דייקסטרה, ובעל שימוש נרחב במשחקי מחשב למשל מציאת נתיב בין דמות השחקן ליעד.

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

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

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

לדוגמה התקבעתי על גודל ריבוע שצלעותיו הן 1.
ועל רשת שגודלה 64 * 64 - 4096 ריבועים.

אם נחליט להקטין את גודל הריבועים בחצי בשביל להוסיף דיוק נהפוך את גודל הרשת ל 128 * 128.
במקום 4096 ריבועים נקבל 16 אלף ריבועים. שיקול כזה גם משפיע על האופן שבו כדאי לממש ולשקול באיזה מבני נתונים להשתמש.

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

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

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

מה ניתן לראות בסרטון המצורף מלבד כישורי עריכה ממוצעים:

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

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

אין כרגע מאמרים ברשימה זו.