منتديات أهل الجزائر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

viewport والنوافذ في vb6 & directx8

استعرض الموضوع التالي استعرض الموضوع السابق اذهب الى الأسفل

viewport والنوافذ في    vb6 & directx8 Empty viewport والنوافذ في vb6 & directx8

مُساهمة  vb6 الى vb20 السبت فبراير 18, 2017 1:30 pm

السلام عليكم ورحمه الله تعالى وبركاته  Razz 
هنا مثال للتنقل بين العرض في نافذه وشاشه كامله.  ......لكن ربما سيعطيك فكره ويساعدك ..
https://www.zeta-uploader.com/1893603292
هنا مثال اخر عن فتح viewport في شاشه العرض
https://www.zeta-uploader.com/211135065
Razz Razz Razz Razz Razz Razz Razz
Razz Razz Razz Razz Razz Razz Razz
كما ترى في الصوره الفرق بين viewport  و render target
viewport والنوافذ في    vb6 & directx8 Untitl10
حيث render target  هو الفورم او الاداه التي تمثل حدود نافذه ثري دي....في حاله العرض في شاشه كامله فانه يكون فورم وليس اداه
اما viewport  عباره عن مرااه  داخل render target ولاكن بكامرا اخرى  ..

مثال 1 ........ Razz    في لعبتك سباق السيارات  تحتاج الى نافذه للمنضر خلف السياره  تمثل المراه الخلفيه.....او اتصال هاتفي  مع احد شخصيات اللعبه تحتاج لاضهار صوره المتصل في زاويه النافذه...........هذه امثله لاستعمالات viewport

مثال 2......... Razz   في محرك العابك تحتاج الى نافذه ثري دي منفصله تمثل الفضاء الثلاثي الابعاد..ونافذه ثري دي اخرى على فورم اخر وكانها فضاء ثلاثي اخر تتعمل لعرض المجسمات او المتريل للمستخدم ...هذه من امثله استعمال render target

هنا موضوع يشرح ما قلناه سابقا للاضافه  http://directx4vb.vbgamer.com/Tutorials/DirectX8/GR_Lesson17.asp

Question Question Question Question Question Question Question Question امثله Question Question Question Question Question Question Question Question Question Question

مثال 1 Exclamation Exclamation Exclamation Exclamation فتح النافذه الرئيسه
هذه الداله استعملها لفتح نافذه فضاء الثلاثي الرئيسه....تذكر النافذه الريسيه هي التي يمكن التنقل فيها بين العرض في نافذه او شاشه كامله....باقي النوافذ الفرعيه يكون العرض في ناغذه وليس fullscreen
Public Function openworldwindow(ByVal Adapter As Long, ByVal devtype As CONST_D3DDEVTYPE, hwnd As Long, ByVal CREATEFLAGS As CONST_D3DCREATEFLAGS, PARAMETERS As D3DPRESENT_PARAMETERS) As Boolean
Set kDirect3DDevice8 = kDirect3D8.CreateDevice(Adapter, devtype, hwnd, CREATEFLAGS, PARAMETERS)
openworldwindow = True
ReDim kD3DPRESENT_PARAMETERSENG(0) As D3DPRESENT_PARAMETERS
kD3DPRESENT_PARAMETERSENG(0) = PARAMETERS
ReDim kDirect3DSwapChain8(0) As Direct3DSwapChain8
ReDim RenderTarget(0) As Direct3DSurface8
Set RenderTarget(0) = kDirect3DDevice8.GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO)
Set DepthBufferSurf = kDirect3DDevice8.GetDepthStencilSurface()
End Function

Adapter ........تمثل كرت الشاشه لديك  اذا كنت تملك اثنين وارت استعمال كرت الشاشه الثانيه فان القيمه =1  واذا اردت استعمال كرت الشاشه الاولى =0
devtype .......تساوي 1  تعني استعمال D3DDEVTYPE_HAL تساوي 2  تعني استعمال D3DDEVTYPE_REF
hwnd .......يجب ان يكون فورم ..حتى تستطيع الانتقال العرض في شاشه كامله.. اذا لم يكن فورم عند الانتقال للعرض في شاشه كامله يحدث خطا ..اما الرجوع الى العرض في نافذه  يمكن ان يكون ال hwnd السابق او اداه  ..معينه في D3DPRESENT_PARAMETERSENG.hDeviceWindow
 
مثال 2 Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation فتح النافذه فرعيه اخرى
هذه الداله استعملها في اضافه نوافذ اخرى...كما ترى كل نافذه جديده تنشئ لها RenderTarget خاص بها...اما الهاوند D3DPRESENT_PARAMETERSENG.hDeviceWindow يمكن ان يكون اداه او فورم ليس الذين استعملتهم في النافذه الرئيسيه   لان العرض في نافذه
Function addwindow (PARAMETERS As D3DPRESENT_PARAMETERS) As Long
ReDim kD3DPRESENT_PARAMETERSENG(UBound(kD3DPRESENT_PARAMETERSENG) + 1) As D3DPRESENT_PARAMETERS
kD3DPRESENT_PARAMETERSENG(UBound(kD3DPRESENT_PARAMETERSENG)) = PARAMETERS

ReDim kDirect3DSwapChain8(UBound(kDirect3DSwapChain8) + 1) As Direct3DSwapChain8
Set kDirect3DSwapChain8(UBound(kDirect3DSwapChain8)) = kDirect3DDevice8.CreateAdditionalSwapChain(kD3DPRESENT_PARAMETERSENG(UBound(kD3DPRESENT_PARAMETERSENG)))

ReDim RenderTarget(UBound(RenderTarget) + 1) As Direct3DSurface8
Set RenderTarget(UBound(RenderTarget)) = kDirect3DSwapChain8(UBound(kDirect3DSwapChain8)).GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO)

End Function

مثال 3 Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation Exclamation انشانا النافذه الريسيه على فورم معين  نريد تغيير الفورم....او نريد تغيير الاعدادات...او نريد  الانتقال للعرض ف شاشه كامله هنا الفايده والغموض والتفاصيل  والتركيز.............................. ......
الخطوه 1 Twisted Evil Twisted Evil Twisted Evil
قبل  الانتقال  بين العرض في نافذه او شاشه كامله او تغيير الاعدادات  اول داله نستعملها هي
Direct3DDevice8.TestCooperativeLevel
الداله السابقه اذا كانت تساوي D3D_OK  فانه يمكننا تغيير الاعدادات
الداله السابقه اذا كانت تساوي D3DERR_DEVICELOST  فانه لا يمكننا  تغيير الاعدادات....كمثال لهذه الحاله  عندما نكون نلعب في لعبه في شاشه كامله ثم  نضغط على ALT+TAB  فان اللعبه يتم تسغيرها الى  شريط المهام السفلي هذا ما يعنيه  D3DERR_DEVICELOST.......اضغط مره اخرى على العبه وهي مصغره في شريط المهام السفلي.....الداله ترجع لنا D3DERR_DEVICENOTRESET  تعني انه خسرنا الاعدادات وعاد التركيز  يمكننا ضبط الاعدادات مره اخرى...
الخطوه 2  Twisted Evil Twisted Evil Twisted Evil

فان داله الرندر  ترجع لنا خطا في هذه الحاله.... لذالك نحسر عملها  فقط في حاله   D3D_OK  هكذا...
If kDirect3DDevice8.TestCooperativeLevel = D3D_OK Then
kDirect3DDevice8.Present ByVal 0, ByVal 0, 0, ByVal 0
End If

اذا كانت الداله Direct3DDevice8.TestCooperativeLevel  اذا كانت الداله ترجع D3D_OK او  D3DERR_DEVICENOTRESET يعني يمكننا تغيير الاعدادات
اي شيئ تم انشاؤه وتخزينه في هذه الذالكره D3DPOOL_DEFAULT يجب تدميره قبل  ضبط الاعدادات مره اخرى .. والى لا تنجح العمليه ويحدث خطا..من الاشياء التي تخزن في D3DPOOL_DEFAULT
النوافذ الفرعيه التي انشاناها   لذالك ندمرها    ..   Set kDirect3DSwapChain8 = Nothing
الرند تارقت  لذالك ندمره ...  Set RenderTarget= Nothing
الدابث بفور  ندمره ....Set DepthBufferSurf = Nothing
التكست لا تحتاج الى تدميره  لاننا يمكن ان نخزنه في ذاكره اخرى غير D3DPOOL_DEFAULT  
المجسمات ايضا لا تنحاج الى تدميرها  لاننا يمكن ان نخزنها في ذاكره اخرى غير  D3DPOOL_DEFAULT
الخطوه 3 Twisted Evil Twisted Evil Twisted Evil
الان نستعمل الداله لتغيير الاعدادات..او الانتقال من العرض في نافذه الى العرض في شاشه كامله هكذا....
kDirect3DDevice8.Reset kD3DPRESENT_PARAMETERS
حيث kD3DPRESENT_PARAMETERS تركيب من نوع  D3DPRESENT_PARAMETERS  عناصره عباره عن اعداداتنا
الخطوه 4 Twisted Evil Twisted Evil Twisted Evil
 بعد ان قمنا بعمليه ال reset   ننشئ الاشياء المخزنه  في  D3DPOOL_DEFAULT التي دمرناها سابقا   مثل الرندر تارقت  او الدابث بفور
تذكر  اذا كان اخر reset او تغيير عملناه   هو العرض في شاشه كامله لايمكنها انشاء النوافذ الفرعيه   مره اخرى حتى  يكون العرض في النافذه الرئيسه عباره عن عرض في نافذه والى يحدث خطا..........
................بعد اي تغيير تفقد الكامرا التي انت ضابها  ويضبط المحرك اوتوماتيكيا كمره موقعها (0.0.0)...لذالك قم بضبط الكامرا مره اخرى
vb6 الى vb20
vb6 الى vb20
عضو
عضو

عدد المساهمات : 10
نقاط : 32
تاريخ التسجيل : 11/10/2016
الموقع : ahl-dz.yoo7.com/f28-montada

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع التالي استعرض الموضوع السابق الرجوع الى أعلى الصفحة

- مواضيع مماثلة

صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى