وبلاگ تخصصي برنامه نويسي با VB

آموزشDirectX-Graphic قسمت اول


موضوع : ساخت يک واسط 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


براي دريافت متن کامل برنامه به من ايميل بزنيد .
منتظر قسمتهاي مهيج بعدي باشيد

+ حامد شیدائیان ; ۱۱:٠٢ ‎ق.ظ ; چهارشنبه ۱٢ تیر ،۱۳۸۱
comment نظرات ()