אני אתן לך דוגמה:
כשאני בונה, למשל, שומר-מסך, כמו אלו שבאים עם ה-Windows, שבו תופיע צורה, נניח קובייה, עם צבעים שונים, באמצעות DirectX, אני בעצם יוצר מחלקה של קוביות, שבה אני שומר, בין היתר, את המיקום של הקובייה (או באמצעות Struct פשוט, או באמצעות מטריצה תלת-מימדית של Translation ו-Transformation).
מה שבפועל מבצע ה-DirectX, זה טעינת הנתונים ל-Buffer, ולאחר סיום הטעינה, מרעננים את המסך.הסבר:
ה-Buffer ישמש כחוצץ בין הנתונים למסך. רענון מסך יעיל, יעשה פעם אחת באיטרציה אחת, כלומר, לא נרצה, בתוכנית שבה יש כמה אובייקטים תלת-מימדיים, לטעון אובייקט, ולרענן, עבור כל אובייקט. דרך יעילה, תהיה לטעון את כל האובייקטים, ואחר כך לרענן את המסך, רק פעם אחת.
אם כן, איך נעשה את זה ?
נגדיר Buffer, שיהיה חוצץ זיכרון. בתוכנית שלך זה יהיה בעצם משתנה מערך שיכיל ערכי צבעים. משתנה זה יהיה מערך דו-מימדי בגודל X*Y (הרוחב * הגובה).
בכל לולאה (איטרציה), שבה אתה מעלה את הכביש, את המכונית, ואת שאר הדברים, אתה תטען את האובייקטים (עצמים) מהעצם הכי רחוק, עד לעצם הכי קרוב, למשתנה Buffer, בדיוק כמו שטענת למסך).
ע"י כך, בסיום הלולאה, תיווצר תמונה (Frame) שתכיל בדיוק את כל העצמים והמיקום המדוייק שלהם.
לאחר מכן, (בסיום האיטרציה), אתה תחליף את המשתנה [Buffer[X,Y בכתובת הזיכרון של המסך (או שתעשה זאת באמצעות פונקציות מובנות, תלוי במה אתה משתמש), וכך, אתה מבצע ריענון למסך רק פעם אחת באיטרציה, כלומר אתה בונה את ה-Frame בנפרד, ואז מעתיק אותו למסך.
זה הכל, בינתיים.
Dudenland