الشبكة العربية لمطوري الألعاب

  محمد النبكاوي مشاركة 1

عندما أضم العلم (D3DCLEAR_ZBUFFER) مع التابع Clear
فإن خلفية التطبيقتصبح مشوشة ومتعددة الألوان وتبين لدي فيما بعد انه لا يوجد
(ZBuffer) مرتبط ب(D3dDevice) فكيف أقوم بربطه ...

UndCOVer

خبير مدير وسام البهنسي مشاركة 2

هناك عدة طرق لربط z-buffer مع الـ d3d device

الأولى والأسهل، هي تحديد مواصفات الـ z-buffer المطلوب أثناء خلق الـ device
مثلاً:

D3DPRESENT_PARAMETERS presentParams;
memset(&presentParams,0,sizeof(presentParams));
presentParams.BackBufferCount = 1;
presentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
presentParams.hDeviceWindow = hwndMyApp;
presentParams.Windowed = FALSE;
presentParams.BackBufferWidth = 1024;
presentParams.BackBufferHeight = 768;
presentParams.BackBufferFormat = D3DFMT_X8R8G8B8;
presentParams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
presentParams.BackBufferFormat = D3DFMT_X8R8G8B8;

// This is what is intersting…
presentParams.EnableAutoDepthStencil = TRUE;
presentParams.AutoDepthStencilFormat = D3DFMT_D16; // or D3DFMT_D24S8


كما تلاحظ، السطرين الأخيرين يحددان إذا كنت تريد أن يقوم D3D بخلق وإدارة الـ z-buffer بشكل أوتوماتيكي (وهو الخيار الأسهل عادة). يمكنك الآن تمرير هذا الـ struct إلى الإجراء IDirect3D9::CreateDevice() وسيتم تشغيل الـ z-buffer بشكل أوتوماتيكي...

الخيار الثاني، وهو أن تخلق الـ z-buffer بيدك (إن صح التعبير)، ثم ربطه مع الـ device. لهذا، استخدم الإجراءات IDirect3DDevice9::CreateDepthStencilSurface() و IDirect3DDevice9::SetDepthStencilSurface()...

الألوان الخضراء والبنفسجية المتناوبة هي من D3D وتظهر عندما تفشل برسم أي شيء على السطح، ثم وبرغم ذلك تقوم بإظهاره على الشاشة. وهي إحدى وسائل المساعدة من D3D على كشف الأخطاء...

أرجو أن أكون قد ساعدتك في حل المشكلة...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

  محمد النبكاوي مشاركة 3

شكراً على ردك الكريم أخي وسام, وسوف أقوم بتجربة ما تفضلت به وأخبرك بالنتائج

UndCOVer

خبير  أحمد عبد الغني مشاركة 4

حبذا لو تعطينا تفاصيل أكثر عن الطريقة الثانية أو مثال إن أمكن؟

اللهم انصر أهلنا في فلسطين وآجرنا أن نكون عوناً لهم