תלת מימד בסי++

smasher

New member
תלת מימד בסי++

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

selalerer

New member
מה אתה כבר יודע?

רק C++ בקונסול, win32api, MFC או מה? לאיזה מע' הפעלה? windows? בקיצור, עוד מידע בבקשה.
 

smasher

New member
אוקיי אז ככה...

אני עובד עם C++ ב-DOS... עם ספריית BGI. בשאלה שלי התכוונתי - שעל מנת ליצור הדמיה (אשליה) של תלת - מימד, צריך לעשות המרה כלשהי של ערכים של נקודה במרחב מ - (X,Y,Z) ל - (X,Y) על מנת להדפיס אותה על המסך - וישנה פונקציה שהמטרה שלה זה ליצור את האשליה- פרספקטיבה הזאת... (לא פונקציה מוכנה.. קטע קוד)
 

DecayCell

New member
זה נושא מסובך

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

mikledet

New member
מורכב...

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

smasher

New member
כבר הזכרתי שאני עובד עם ספריית-

BGI של בורלנד סי++. מ"מ אני די מסוגל להבין וגם גאומטריה. Z-BUFFER ואלגרויתמי צייר אחרים הם עדיין לא מה שאטני רותה לדעת.. אלה השלב הבא. אני מעוניין להבין קודם כל איך אני יוצר את אשליית התלת-מימד - קבלת הפרספקטיבה של עומק.
 

DecayCell

New member
BGI לא תומכת תלת-מימד

לפחות לא למיטב ידיעתי. אשליית תלת-מימד - זה נושא שקשור במתמטיקת וקטורים... חפש בגוגל. רק מה - אם אתה רוצה לעסוק בגרפיקה תלת-מימדית מהר לזנוח את הקומפיילר המיושן של בורלנד (בהנחה שאתה משתמש בגירסא הנפוצה בבתי-הספר - זו שבאה עם עורך ASCII). גם אם תכתוב את כל הפונקציות בעצמך, לא תוכל לנצל שום חומרה מאיצת-תלת-מימד ולכן כל תוכנית שתכתוב תהא איטית. אני ממליץ להשתמש בקומפיילר MinGW - יש לו IDE מאוד נוח בשם ++Dev-C (למי שתוהה - הצלחתי לסדר את הבעיה בה נתקלתי איתו) שניתן להשיג כאן: http://www.bloodshed.net/
 

smasher

New member
הסברים ....

אני לא עוסק בזה בתור עבודה, אני תלמיד תיכון וזה לצורך פרוייקט 5 יח"ל. BGI לא תומכת בתלת מימד? בהחלט אפשר ליצור גופים תלת מימדים.. וחיפשתי בגוגל.. לא ממש מצאתי מה שאני צריך.. עניין הפרספקטיבה שיביא לידי ביטוי את ערכי ה-Z של נקודה כלשהי במרחב. (שהרי נקודה מודפסת למסך על ידי ערכי X ו-Y בלבד..)
 

אלדד28

New member
ספריית BGI

מאפשרת לך בסה"כ להציג פיקסלים על המסך. היא לא "תומכת בתלת מימד" כי אין לה שום פונקציות של תלת מימד. מה שאתה צריך לדעת זה אלמנטים בסיסיים בגרפיקה תלת מימדית. בערך כמו שאמרת, אתה צריך את הנוסחאות שיהפכו לך X,Y,Z ל-X,Y. אחרי שיהיה לך את זה תוכל להתחיל לעבוד על אלגוריתמים לתלת מימד - כמו ZBuffer, Hidden surfaces removal, בניית טקסטורות וכו'. קצת בעייתי למצוא חומר על זה, כי כיום אף אחד לא עושה את הדברים האלו בעצמו - מכיוון שרוב העבודה מבוצעת בחומרה (על כרטיס המסך), לתוכניתן נותר להתעסק בדברים קצת יותר מורכבים, ויותר "גבוהים". בכל זאת הצלחתי למצוא לך משהו נחמד, קרא את העמוד הזה.
 

smasher

New member
דבר ראשון תודה...

ו- "אתה צריך את הנוסחאות שיהפכו לך X,Y,Z ל-X,Y." בדיוק את זה אני מחפש... יש לך כיוון בשבילי כיצד ניתן לעשות זאת ?
 

smasher

New member
עזרה בבקשה...

הקטע הרלונטי מצורף בקובץ. עדיין לא ממש הבנתי את ההמרה מתלת מימד לדו מימד לצורך ההפדסה..
 

Motti19

New member
קבל, איש!

Xscreen=X*PerspectiveFactor/Z Yscreen=Y*PerspectiveFactor/Z X,Y,Z הם הנקודות של ה"אשלייה", PerspectiveFactor זה ערך הפרספקטיבה שאתה קובע והXscreen, Yscreen זה הנקודות האמיתיות שמופיעות על המסך. אבל, אני לא חושב שזה עשוי לעזור לך המידע הספיציפי הזה כי כפי שאמרו הגולשים לפניי, צריך ממש ללמוד את המקצוע הגרפיקה התלת מימדית ואת ה"טריקים" של האשלייה התלת מימדית. בכל אופן, בהצלחה!
 
תוספת קטנה

עד כמה שזכור לי מימי תלת המימד העליזים, ה-FACTOR המדובר לפרספקטיבה, המקובל ביותר הוא PI/4.
 

smasher

New member
מה ?!??!??!?!?!!?!

אני הייתי בטוח שזה מאות... יצא לי משהו.. אבל נראה קצת מוזר.. אני נתתי לו את הערך 350.0. יש לי שאלה.. המורה שלי משתמש במשתנה - double C = 350.0. ובעזרת מטריצה של 4 * 4 הוא משנה את הערך של התא [3][2] ל -
P[2[3] = -1 / c;​
יש עוד וקטור-
prjDir (1, 1, c)​
אני חושב... אני עדיין לא מצליח להבין מה הקטע הזה עושה ...
 

לוימתן

New member
אפשרות לשימוש במשתנה מרחק

שלום אני חדש פה אני עכשיו עובד על פרויקט בתלת מימד. אתה יכול להגדיר משתנה שיקבע את המרחק בין המתבונן לעצם נגיד d:=200 ואז הפעולות הן פשוטות x:= (d*x) / (d-z) y:= (d*y) / (d-z)
 
למעלה