שאלה דחופה ב-DirectX8

../images/Emo4.gif שאלה דחופה ב-DirectX8

נתקלתי בבעייה: אני מנסה להשיג את הנתונים מה-ZBuffer שלי (אחרי הרינדור). אני משיג את הבאפר בעזרת IDirect3DDevice8::GetDepthStencilSurface ומנסה לנעול אותו כדי לקבל נתונים בעזרת IDirect3DSurface8::LockRect. אני מקבל תשובה מהדיבאגר שסוג ה-Surface חייב להיות D3DFMT_D16_LOCKABLE. זה כמובן לא הדיפולט של ה-Surface (הדיפולט הוא D3DFMT_D16). אז אני חוזר לשלב האתחול ויוצר Surface חדש משלי בעזרת IDirect3D::CreateDepthStencilSurface ומגדיר את הפורמט D3DFMT_D16_LOCKABLE כמו שצריך. עד כאן הכל בסדר, אבל כשאני מנסב לקבוע אותו כיעד לרינדור בעזרת IDirect3DDevice8::SetRenderTarget (פרמטר שני הוא פוינטר ל-Surface ה-DepthStencil) אני מקבל מהדיבאגר תשובה שהפורמט של ה-DepthStencil Surface (כזכור, D3DFMT_D16_LOCKABLE) לא תואם לפורמט ידע הרנדרינג הראשי (הפרמטר הראשון ל- SetRenderTarget). ניסיתי את כל הפורמטים האפשריים ל-RenderTarget הראשי, ואף אחד לא מקבל את ה-DepthStencil surface בפורמט הרצוי. אז איך מוציאים את נתוני ה-ZBuffer אם אי אפשר לנעול אותו? אולי יש דרך אחרת שאני לא יודע עליה? אנא עזרתכם!! תודה, ציףציפור.
 

gonen-y

New member
??????????????

אני אישית לא הבנתי כלום מה בדיוק אתה מנסה להשיג????? ולמה? ובאיזו תוכנה?
 
מה שאני מנסה להשיג בעזרת Direct3D..

מה שאני מנסה להשיג זה את הנתונים של ה-ZBuffer (הבאפר ששומר את המרחק, העומק במסך, של כל פיקסל). אני צריך את זה לצורך קצת מורכב: אני מנסה להשתמש בנתונים שלאחר הרינדור לצרכים אחרים (כלומר לא כדי לצייר ישירות למסך). את נתוני הצבע הצלחתי להוציא (RGB של כל פיקסל) אבל את העומק לא. מדובר בשני באפרים שהמערכת של Direct3D שומרת ברקע במהלך החישובים (באפר לצבע ובאפר לעומק של כל פיקסל), ובסוף בעזרתם מוציאה את הפלט למסך. אני לא משתמש בתוכנה אלא מתכנת ++C בעזרת SDK של microsoft שנקרא Direct3D, שהוא מבוסס באופן כללי על OpenGL (ה-OpenGL זהו ה-SDK הבסיסי שרוב התוכנות, למשל 3dStudioMax, מבוססות עליו, כלומר נכתבו בעזרתו). אני מקווה שזה יותר ברור?
 

galrt

New member
wrong forum

if it was with dx7 i could help out.. i havent touched 8 yet. anyway, this is a user 3d forum .. packages not programming. try #gamedev in efnet.
 
למעלה