DCSIMG
Mirrors in 3D scene Part 1 - הבלוג של צביקה פאר

הבלוג של צביקה פאר

בבלוג זה אני אנסה לשתף את הקוראים בחקירת מגוון טכנולוגיות נפוצות פחות או יותר

Mirrors in 3D scene Part 1

קיבלתי את השאלה הזו באיימיל :

לצבי שלום

אנו כותבים אפליקצית תלת מימד ב directx 11 ומעונינים להוסיף ל scene שלנו מראות .

איך אפשר לעשות את זה באופן פשוט ?

ובכן יש מספר שיטות להוספת מראות ל scene .

בדרך כלל אנו מקבלים מהגרפיקאי הגדרות של מיקום המראות בנוסף להגדרות shading  של האוביקטים שצוירו במראה .

(הShading של התמונה במראה נועדה למנוע תחושה של השתקפות של 100% כמו מראה מושלמת אלא לבצע אפקטים שישנו את הדמות המשתקפת )

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

השיטה שאני אציג כאן מורכבת משלושה תהליכים מרכזים :

השלב הראשון הינו רינדור שטח המראה לתוך ה stencil buffer כלומר יצירת שטח ב stensil buffer אשר מיצג את שטח המראה .

השלב השני רינודר הscene מנקודת מבט של המראה .

השלב השלישי סידור הz – buffer  וה Setnecil buffer של ה Scene כך שפעולות הציור הבאות התור לא ישנו דברים בדמות שצוירה במראה .

מכיוון שאנו עובדים עם Direct3d11 התהליך יכול להתבצע בdeffred context על מנת למקבל את תהליך הרינדור כמו כן יש לזכור שתהליך רינדור כל

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

חשוב לא לרנדר מראות שלא מופיעות בscene ברגע נתון לעבוד עם back buffer culling נכון ועוד .

בדמו MultithreadedRendering11 אשר נמצא בsdk  יש דוגמא לרנדור מראות בשיטה הזו .

Mirror1

 

הרינדור של המראות בDemo הזה מתבצע בפונקציה :RenderMirror אשר מקבלת את ה ID3D11DeviceContext

שעליו צריכים לצייר את המראות .

 

התרשים זרימה של הפונקציה הזו הינה :

mirror2

 

בפוסטים הבאים אני אנסה לתאר לעומק את כל אחד משהלבים הן מבחינת Direct3d api והן מבחינה מתמטית של הscene

 

 

 

 

 

 

פורסם: Nov 12 2010, 12:17 PM by zvikapeer | with no comments
תגים:, ,
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 5 and type the answer here:


Enter the numbers above: