( تعداد نمایش : 1706 )

آموزش DirectX-Graphic در ویژوال بیسیک قسمت پنجم

موضوع : مفاهیم اولیه رسم اشکال سه بعدی در DirectX 8

در این درس با استفاده از Direct3D یک مکعب را رسم می کنیم . برای این منظور ابتدا نیاز به یک بافر داریم که بتوانیم شکل مورد نظر خود را در آن ذخیره کنیم :

Dim VBuffer as Direct3DVertexBuffer8

برای رسم مکعب از vertex های سه بعدی استفاده می کنیم . برای اینکار نیاز به تعریف یک تایپ جدید داریم :

Private Type LITVERTEX
x as single
y as single
z as single
color as long
specular as long
tu as single
tv as single
end type

توصیف گر این فرمت ، بصورت زیر است :

Const Lit_FVF = (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR Or D3DFVF_TEX1)x

برای توصیف مکعب در این درس از روشی غیرکارامد استفاده شده است . به این ترتیب که از ۳۶ عدد vertex استفاده شده ( در درسهای بعدی متدهایی معرفی خواهند شد که اجازه می دهند از ۸ عدد vertex باری توصیف مکعب استفاده کنید ) .

Dim cube(35) as LITVERTEX

سپس باید یکسری ماتریس سه بعدی تعریف کنیم :
اولین ماتریس ، matworld است که نشان می دهد چگونه vertex ها در فضای سه بعدی قرار گرفته اند . دومین ماتریس ، matview است که نشان می دهد دوربین ( نقطه دید ) در کجا قرار گرفته و سومین ماتریس ، matproj است که نشان می دهد دوربین چگونه دنیای سه بعدی را روی صفحه دو بعدی نشان می دهد :

Dim matworld as D3DMATRIX
Dim matview as D3DMATRIX
Dim matproj as D3DMATRIX

در تابع Initialize قبل از ساخت device بایستی چک کنیم که آیا می توانیم از یک بافر Z شانزده بیتی استفاده کنیم یا نه ؟

If D3D.CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, DispMode.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16) = D3D_OK Then
D3DWindow.AutoDepthStencilFormat = D3DFMT_D16 ’16 bit Z-Buffer

حال بایستی متد D3DCreateDevice را اجرا کنید . سپس باید سیستم سایه زنی vertex را با فرمت vertex مان تنظیم کنیم :

D3DDevice.SetVertexShader Lit_FVF

همچنین سیستم نورپردازی را غیر فعال می کنیم :

D3DDevice.SetRenderState D3DRS_LIGHTING, False

Direct3D هیچ مثلثی را که در دید شما نباشد رسم نخواهد کرد . برای متوقف کردن این امر بایستی حالت culling آنرا متوقف کنید همچنین vertex ها را بترتیب عقربه های ساعت معرفی کنید :

D3DDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE

سپس باید فرمت بافر Z را فعال سازید :

D3DDevice.SetRenderState D3DRS_ZENABLE, 1


دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن