DCSIMG
שילוב בין שתי אפליקציות המרנדרות dx sences - הבלוג של צביקה פאר

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

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

שילוב בין שתי אפליקציות המרנדרות dx sences

לפעמים יש צורך לשלב בין שני scene ים ששתי אפליקציות Direct3D שונות יוצרות לתוך Scene   אחד .

לדוגמא: אני רוצה להשתמש באפליקציה שלי בBing maps  לצורך יצירת ועדכון הterrain ומעל הTerrain  אני צריך לרנדר  את האובייקטים שלי .

בניגוד למקרה עם אפליקציות 2D שאולי אפשר לשלב תמונות על ידי משחק עם ערכי alpha המצב בעולם של התלת מימד מורכב בהרבה .

הטכנולוגיות יכולות להיות מדור שונהBing  עובד מול Direct3d9  ואני עובד עם Direct3d11  .כל ה api והאובייקטים שונים מאוד .

פעולת הrender חייבת להיות משותפת על מנת שהZ-buffer filter  יפעל גם על האובייקטים שלי וגם על האובייקטים של Bing .כלומר אם מכונית שאני מרנדר נמצאת מאחורי הר שbing  מרדנר ההר צריך להסתיר את המכונית שאני מרנדר .

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

כמו כן יש אוביקטים בscene  של Bing  שאני לא רוצה שירונדרו אצלי באפליקציה אני רוצה רק את הTerrain  נטו מבלי כפתורים שBing מרנדרת על הscene  שלה .

מכיוון שאי אפשר לשתף את הsurface ים בין האפליקציות וbing לא פותח לנו api  של קבלת הResource ים מbing  Vertexים והTexture ים ) אנו צריכים להוציא את הResources מBing לא בדרך המלך.

הפתרון שמימשנו

הפתרון מתבסס על יירוט של הקריאות ל dx api  על ידי Bing .

יצרנו אפליקצית .net win form שמריצה WebBrowser Control ולתוך ה WebBrowser control  אנו טוענים עמוד html  מקומי שמציג את Bing  אפשר לשלוט על Bing  באמצעות פקודות של automation  פשוטת של בחירת המיקום בעולם שהמפה מציגה וכד .

אנו יוצרים  proxy dll   שתפקידו ליירט קריאות מBing  ל d3d9.dll ישנם מספר דוגמאות לשלד של dll  כזה במרחבי ה Web  . הDLL בשם  d3d9.dll  ממוקם בספריה שמריצה את האפליקציה עם Bing ולכן Bing טוען את הProxy dll שלנו כאשר הוא קורא לCreateDevice

אנו כתבנו proxy ל interface ים החשובים של Dx9 אשר הם נקראים במקום האורגינלים .

ברגע שאנו מיירטים פקודה שBing פקד וזו פקודה שמעדכנת Resource  אנו מעתיקם את המידע שלה ל shared memory  שמשותף ל dll  המירט ו האפליקציה שלנו וכך יש לנו ביד את הpre resource  ואנו מכניסים אותו ל pipline  שלנו בתהליך הRender  שלנו .

אנו צריכים לקלף או להתאים את הResource לDX11  יש שוני מהותי בין העבודה עם Resources  בDX9 שהשתנה עם המעבר ל DX10 יש שונה בהדרת הSurfaceים וכד

אין צורך שתהליך הירוט יעביר את קריאות הRender  ל d3d9.dll האורגינל חבל על תעבורה על הBus המיותרת ועבודת הכרטיס מסך.יש פקודות בעיקר אתחול שכן צריכות לקרא ל d3d9.dll המקורי על מנת ש bing  יוכל לאתחל את העבודה שלו. הכל בתלות במשחק של trial and error .

 

פורסם: Jun 02 2010, 09:56 PM by zvikapeer | with no comments
תגים:,
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 3 and type the answer here:


Enter the numbers above: