גרפיקה תלת מימדית...

smasher

New member
גרפיקה תלת מימדית...

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

smasher

New member
הנוסחה עצמה -

של הפרספקטיבה -
if (d-z) != 0 { x = (x*d) / (d-z) y = (y*d) / (d-z) }​
 

hatulflezet

New member
זה די ברור לא?

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

smasher

New member
חחח...

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

hatulflezet

New member
זה כבר משהו אחר...

פה כבר צריך לראות קוד... האם משתנב רק Z או גם X ו Y? אם ערכי כל הצירים מתשנים - והוא לא זז - יש ךף בעיה בהעברת הפרמטרים לפונקציית הציור.
 

smasher

New member
אז לא-

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

hatulflezet

New member
לא הבנתי

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

smasher

New member
נכון.. אבל

יש רק נקודה אחלת שמגדריה מעגל איפה נכנס פה הרדיוס? איזה נוסחה אני יכול הלפעיל עליו אני לא מצייר אותו..
 

hatulflezet

New member
לא ניראה לי הגיוני

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

smasher

New member
לא הבנת אותי..

בוודאי שאני מצייר מעגל כך -
circle(x, y, r);​
הבעיה היא - למשל כשיש לי ריבוע אז אני משתשמש בנוסחת הפרספקטיבה שציינתי לכל אחד מארבעת הקודקודים ואז הריבוע משתנה בהתאם במעגל יש לי רק נקודה אחת אז הוא לא משתנה.. ואני גם לא יודע איך "לגעת" ברדיוס כללומר איזה נוסחה להפעיל עליו..
 

hatulflezet

New member
אבל כבר ענית לך על זה...

ועוד מישהו הוסיף תשובה דומה - אתה יכול להשתמש בפרספקטיבה של הריבוע. במקום להתעסק עם עגול - תייסם הכל על ריבוע - רק תצייר עגול במקום הרבוע - את מידות העגול תקח ממדות הריבוע.
 

smasher

New member
בלתי אפשרי.. בעצם כן אבל סתם מסובך

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

giladznaor

New member
שיטה נוספת

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