موضوع : ساخت يک واسط direct3D
DirectX8 ابزاري براي ساخت تصاوير ثابت و متحرک دو بعدي و سه بعدي مي باشد .
براي کار با DirectX8 ابتدا بايستي آنرا روي سيستم خود نصب کنيد . سپس در محيط vb از منوي project گزينه References را انتخاب کنيد . در فرمي که ظاهر مي شود اطمينان حاصل کنيد که گزينه DirectX8 for VB type library فعال باشد .
براي کار با DirectX8 بايستي از تعريف نمودن شي پايه DirectX8 شروع نمود: Dim Dx as DirectX8 شي Direct3D8 براي کنترل اشيا سه بعدي بکار مي رود : Dim D3D as Direct3D8 شي Direct3DDevice8 ، سخت افزار مربوط به رندر تصاوير را مشخص مي کند : Dim D3DDevice as Direct3DDevice8 حال براي شروع کار با Direct3D ، تابع ( ) initialise را تعريف مي کنيم . اگر اينکار درست انجام شود تابع ، مقدار true را برمي گرداند : public function initialise () as Boolean Dim DispMode as D3DISPLAYMODE شي D3DISPLAYMODE حالت نمايش را مشخص مي نمايد . Dim D3Dwindow as D3DPRESENT_PARAMETERS شي فوق مشخص مي کند که viewport شما چگونه باشد . حال شي اصلي DirectX8 را مي سازيم : Set Dx=New DirectX8 سپس شي اصلي ساخت واسط سه بعدي را مي سازيم : ()set D3D.Dx.Direct3Dcreate سپس حالت فعلي نمايش را با دستور زير استخراج مي کنيم : D3D.getadapterdisplaymode D3DADAPTER_DEFAULT,dispmode حال دو حالت براي کار با DirectX داريم : 1 - windowed mode 2 - fullscrean mode
1 - براي کار با حالت پنجره اي ابتدا اين موضوع را به DirectX اطلاع مي دهيم: D3Dwindow.windowed=1 سپس نوع referesh تصوير را مشخص مي کنيم: D3Dwindow.swapeffect=D3DSWAPEFFECT_COPY_VSYNC سپس بايستي فرمت بافر نگهدارنده تصاوير را مشخص کنيم : D3Dwindow.backbufferformat=dispmode.format
2 - براي کار با حالت تمام صفحه ، ابتدا نوع refresh را مشخص کرده سپس تعداد بافر هاي تصوير و سرانجام نوع و سايز بافر را مشخص مي نمائيم : D3Dwindow.swapeffect=D3DSWAPEFFECT_DISCARD D3Dwindow.backbuffercount=1 D3Dwindow.backbufferformat=dispmode.format D3Dwindow.backbufferheight=dispmode.height D3Dwindow.backbufferwidth=dispmode.width سپس پنجره نمايش مشخص مي گردد : D3Dwindow.hdevicewindow=frmMain.hwnd
@حال بايستي يک device ساخته شود که يا از طريق سخت افزار و يا نرم افزار تصاوير را رندر نمايد :
Set D3DDevice=D3Dcreatedevice(D3DADAPTER_DEFAULT ,D3DDEVTYPE_HAL, frmMain.hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3Dwindow)x, end sub درصورتي که کارت گرافيک شما امکانات رندر سخت افزاري تصاوير را ندارد از D3DDEVTYPE_REF بجاي D3DDEVTYPE_HAL استفاده کنيد . حال بايستي روتين render را بنويسيم . البته در اين درس تصويري براي رندر نداريم و تنها چگونگي نوشتن اين روتين را بيان خواهم کرد : ? - ابتدا بايستي device مربوط به رندر ، قبل از کشيدن تصوير در آن پاک شود : D3DDevice.clear 0,byval 0,D3DCLEAR_TARGET,&H0,1#,0 عدد hex اي که در دستور فوق آمده رنگ زمينه صفحه را مشخص مي کند
? - سپس بايستي تصاوير مورد نظر را رندر کنيم . اينکار توسط دستورات زير انجام مي شود : D3DDevice.beginscence all rendering calls go between these two lines ' D3DDEvice.endscence
3 - در پايان بايستي صفحه را update کنيد : D3DDevice.present byval 0,byval 0,0,byval 0
|