در این درس با استفاده از 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
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن