עזרה בבניית מנוע

eranegrin

New member
עזרה בבניית מנוע

אני בעיצומו של בניית מנוע למשחק בסביבה תלת ממדית ומכיוון שבניית המנוע מתבצעת בזמני הפרטי, על חשבון בת הזוג... אני ישמח לקצר תהליכים רציתי לדעת אם מישהו יכול להפנות אותי לאלגוריתם חכם של collision detection של קוביות. חשוב! לא מרובעים, קובייה עם 6 פאות. בנוסף אם יש כאן מפתחים שמעוניינים לעזור ויכולים לתרום לפיתוח מנוע שלם לסביבת C# .NET (שימוש ב csgl.dll openGL בתאימות מלאה עם 3ds-Max) אתם מוזמנים לפנות אלי בפרטי. עיקר העזרה הנדרשת היא במודלים פיזיקליים של תנועת חיות ובני אדם (זוויות מפרקים וקשרים אחרים) מודלים של כלי תחבורה (רכב, טייס ושייט), dynamic surface, מצלמות, תאורה ופרטים אחרים כבר מוכנים תודה מראש על כל עזרה
 

IdleThought

New member
הממפ

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

eranegrin

New member
אפשר...

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

IdleThought

New member
לא חשבתי על זה ../images/Emo13.gif

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

adiel666

New member
אתה לא חושב שאתה עובד עם טכנולוגיה מיושנת?

אחרי הכל CSGL זה פרוייקט מאוד ישן... חבל לבנות מנוע - היום, ולהשתמש בפרוייקט שהCVS האחרון שלו הוא מ2003(די בטוח שזה OGL1.1 או משהו בסגנון, כשהיום יש כבר 3.2). אם אתה בטוח שאתה רוצה לעבוד עם OGL בC#(קצת מוזר) תנסה את http://sourceforge.net/projects/taoframework לפחות זה עדכני(עדכון אחרון לפני חצי שנה). יש את זה גם לMONO וגם ל.NET. מעבר לכך, בנוגע לcollision עשיתי את זה עם jME(בעבר) באמצעות בדיקה על Oriented Bounding Boxes שמייצגים כל Child של הMesh(כפי שהוא נשמר בתוכנת המידול). במידה ויש חפיפה על הקוביות, זה היה בודק חפיפת משולשים - ולא פוליגונים(שמסוגלים להיות בעלי יותר מ3 קודקודים). - זה עבד מאוד לאט, בקטע של המשולשים, לא הצלחתי לייעל את זה אז פשוט זרקתי את זה ונשארתי עם שלב 1(זה היה מספק לאותו הפרוייקט). אני חושב שהיום משתמשים בGPU בשביל לבדוק Collision עם אובייקטים אחרים, זה הרבה יותר מהיר(דרך שיידר). בשביל לטעון מודלים עם אנימציה תצטרך ללמוד איך לעבוד עם Inverse Kinematics- http://en.wikipedia.org/wiki/Inverse_kinematics מעטים האנשים שבונים היום מנועי משחק, לאור המנועים שקיימים בשוק. אישית, הייתי בטח משתמש בAxiom3D(שאגב הSVN שלו עודכן עוד אתמול) בשביל לפתח עם מנוע בC#, למרות שאם כבר הייתי רוצה לבנות מנוע בעצמי - הייתי עושה את זה עם XNA ולא עם איזו מעטפת דלת תמיכה לOGL. בכל אופן, בהצלחה.
 

eranegrin

New member
אני מודע לבעייתיות של csgl

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

De-Panther

New member
אין לי כוח וזמן ללמוד טכנולוגיה חדשה שהיא קלה

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

eranegrin

New member
בכלל לא נכון

אמנם csgl היא מעטפת ישנה אבל היא עדיין עושה שימוש ב OGL ו OGL היא בהחלט לא טכנולוגיה ישנה או מתה, אני באופן אישי נהנה מאוד מבניית מנועים, לקחת מנוע מוכן ולבנות משחק בעזרתו לא ממש מעניין אותי. הרבה יותר מאתגרת אותי הפיזיקה מאחורי המנוע. להחליף למעטפת חדשה כמו TAO אמור לקחת, לכל היותר, רבע שעה, ואז נלמד את השינויים בגרסאות החדשות של OGL. אם תיראה מה עשיתי בעזרת ה csgl המסכן, תבין שכמה שזה ישן זה עדיין מרשים מאוד ורלוונטי, באופן אישי אני מעדיף את זה על כל טכנולוגיה Flash alike
 

adiel666

New member
נשמע כיף

המנוע יהיה open source? אני חושב שיש לי מספיק נסיון עם מנועים גרפיים בשביל לדעת איך להנדס אחד. יש לך מקור טוב לחזרה על OGL חוץ מהRed book? רק תוכן העניינים שלו גורם לי לסגור את הקובץ. אני יודע איך הכל עובד(עבדתי עם LWJGL בJAVA) אבל לא ניסיתי את זה בחיים עם C#. אם תמצא הרבה אנשים בארץ שיש להם זמן לזה, זה יכול להיות ממש כיף לעבוד על זה בקבוצה גדולה של מפתחים.
 

eranegrin

New member
האמת כיף

נעזר בעיקר באתרים כמו Nehe, glProgramming ה"רד בוק" בדרך אבל לצרכים שלי האתרים בהחלט מספיקים, כשהמנוע יסתיים (רחוק, זה נעשה בזמני הפרטי) הוא יהיה open source. אני ישמח מאוד אם תקום קבוצה כזו. הרבה פחות קשה לפתח מנוע ממה שאנשים נוטים לחשוב (אבל עדיין קשה מאוד)
 

De-Panther

New member
למה שלא תעשה אותו פתוח כבר מעכשיו? תמצא מישהו

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

eranegrin

New member
זה בהחלט הכיוון שלי

אתמול התחלתי לעבוד עם Tao-Framework, המרתי את כל הפרויקט למעטפת של Tao וזה ידרוש ממני קצת זמן ללמוד את כל ה API אבל ברגע שיהיה לי מנוע שעובד ברמה הבסיסית אני יוציא אותו החוצה לכל מי שירצה לעזור. בינתיים העליתי סרטון שממחיש מעט מהיכולות של המנוע. מכונית שעוצבה ב 3Ds-Max ומשטח שנבנה בעזרת פונקציות טריגונומטריות, המכונית מקבלת בכל רגע נתון את גובה המשטח והזוית שלו, כמובן שהכול גנרי לכל כלי רכב או משטח. מתנצל מראש על המודלים... הם פרי יצירתי ואני לא ממש מעצב. לינק לסרטון http://www.youtube.com/watch?v=goYKahZps5k
 

adiel666

New member
ואם כבר open source.

אתה יכול פשוט להחליט על רשיון, אתה לא חייב לתת "הכל בחינם", אתה יכול להתחיל אותו למשל עם GPL שהוא בכלל לא רע למפתח. ויש לך את הSVN בGoogle Code כ-Source Control. אגב אתה כתבת את ה"מפרש" למודל הזה?
 

adiel666

New member
איך אתה טוען את המודל

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

eranegrin

New member
בהחלט

בניתי מודול שקורא את האובייקט (vertex, normals, textures), מחלק אותו לתת אובייקטים לפי השם של כל אובייקט (Box1 לדוגמה), כך אני יכול לשלוט על כל גלגל בנפרד במודל לדוגמה שעשיתי. מה שמאפשר לי גם לייבא סצנות שלמות מה MAX שכוללות המון אובייקטים ליצירת סביבה מורכבת (בתים, עצים ומיני נבלות)
 

voguemaster

New member
אני אצטרך קצת יותר מידע כדי לתת לך כיוון

כי יש מגוון פתרונות לכל דבר. באופן עקרוני אלגוריתם שבודק אם שתי קוביות נחתכות זה אלגוריתם קל אם מדובר ב-AXIS ALIGNED BOX או טיפה יותר מסובך ב-ORIENTED BOUNDING BOX (שהן ד"א, כמעט ולא בשימוש בתעשיית המשחקים, למעט מקרים מאוד מסויימים). לכל משחק יש אופטימיזציות משלו אבל קח בחשבון שב-COL DET כללי ביותר יש שני שלבים עיקריים: 1. BROADPHASE - זה השלב שבו "מחפשים" או מגלים איזה זוגות של אובייקטים עלולים להיות בהתנגשות. בד"כ משתמשים בשלב הזה באלגוריתמים שמחלקים את המרחב (GRIDים למיניהם או עצים כמו OCTREE) או בטכניקות אחרות קצת. ראוי לציין שהאלגוריתם הכי נפוץ במנועים פיסיקליים בני דורנו (HAVOK, PHYSX וכל הנגזרות שלהם, BULLET וכל החבר'ה האחרים) הוא SWEEP AND PRUNE, וגם לו יש כמה גרסאות. 2. שלב של NEAR PHASE אם תרצה - שבו מחליטים על הצורה הטובה ביותר לבדוק התנגשות בין שני האובייקטים ומבצעים את הבדיקות. ברמה הזו יש הרבה אפשרות משחק - אפשר לבדוק התנגשות עם גיאומטריה מקורבת ולא מדויקת כמו המודלים של הרינדור (מה שנקרא PROXY GEOMETRY) וגם אפשר לפעמים להסתפק בבדיקה "נחותה" יחסית במקום לחפש את כל המשולשים שנחתכים בין שני האובייקטים. זה באמת עולם ומלואו. תגיד ממה שאתה רוצה להתחיל אבל בעיקרון אני ממליץ לך לקרוא על SWEEP AND PRUNE. תתחיל מכאן . יש שם בחור שנקרא PIERRE שכתב מדריך מאוד נחמד על SWEEP AND PRUNE ומומלץ לקרוא אותו. בנוסף, אם אתה רוצה לראות איך הדברים מבוצעים במנוע אמיתי, יש מנוע OPEN SOURCE מאוד מוצלח, משתמשים בו במשחקים מסחריים (אפילו בפלטפורמות כמו PS3) ויש הרבה מה ללמוד ממנו. BULLET PHYSICS. אתה יכול להוריד את הקוד וללמוד או ללמוד מהתיעוד והפורומים. אם תצטרך עזרה אני אנסה לעזור, עברתי על הקוד שלהם כבר הרבה פעמים... לבסוף, אם אתה רוצה המלצה על ספר טוב בנושא - REAL TIME COLLISION DETECTION של CHRISTER ERICSON. מומלץ מאוד.
 

eranegrin

New member
AABB זה מה שאני צריך, תודה

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