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

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

موضوع : ترسیم اشیا سه بعدی با استفاده از شی Mesh
شی Mesh که جزو اشیا D3DX می باشد امکان ترسیم اشیا سه بعدی پایه و همچنین ترسیم مش های custom دلخواه را به شما می دهد . در این درس از شی Mesh برای ترسیم یک کره ( sphere ) استفاده می کنیم . ابتدا متغیر sphere را بصورت زیر تعریف کنید :


Dim sphere as D3DXMesh


همچنین برای نورپردازی و اختصاص material به کره به متغیرهای زیر نیاز داریم :


Dim d3dLight As D3DLIGHT8
Dim material As D3DMATERIAL8
Dim Col As D3DCOLORVALUE


در تابع Initial پس از ساخت اشیا D3D و D3DX و D3DDevice بایستی پارامترهای رنگ ، نورپردازی و اختصاص ماده ( material ) به کره را بصورت زیر تنظیم کنید :


Col.a = 1
Col.b = 1
Col.g = 1
Col.r = 1
d3dLight.Type = D3DLIGHT_DIRECTIONAL
d3dLight.diffuse = Col
d3dLight.Direction = vec(-1, -1, -1)x


نورپردازی از نوع جهت دار با رنگ col و بردار جهت (۱-,۱-,۱-) است .
نکته :
رنگ ambient رنگی است که هنگامیکه جسم در سایه باشد به خود می گیرد . بعبارت دیگر این رنگ را جسم وقتی که در معرض یک نور ambient باشد از خود منعکس می کند .
رنگ diffuse رنگی است که هنگامیکه جسم در معرض نور مستقیم قرار بگیرد از خود منعکس می کند .


material.Ambient = Col
material.diffuse = Col
d3dDevice.SetMaterial material
d3dDevice.SetLight 0, d3dLight
d3dDevice.LightEnable 0, 1


سپس بایستی پارامترهای rendering را تنظیم کنید :


d3dDevice.SetRenderState D3DRS_LIGHTING, 1
d3dDevice.SetRenderState D3DRS_ZENABLE, 1
d3dDevice.SetRenderState D3DRS_LIGHTING, 1
d3dDevice.SetRenderState D3DRS_ZENABLE, 1
d3dDevice.SetRenderState D3DRS_SHADEMODE, D3DSHADE_GOURAUD
d3dDevice.SetRenderState D3DRS_AMBIENT, &H202020
d3dDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR


حال بایستی شی sphere را بسازیم :


Set Sphere = d3dx.CreateSphere(d3dDevice, 2, 1000, 20, Nothing)x


که ۲ شعاع کره و ۱۰۰۰ تعداد slice هایی است که کره با آن ساخته می شود .
سپس بردارهای نقطه دید و مکان دوربین و رنگ زمینه را تنظیم کنید ( viewpoint و camerapoint از نوع D3DVECTOR هستند ) .


ViewPoint = vec(0, 0, 0)
CameraPoint = vec(4, 4, 4)
BackColor = &H404040


در روتین Render ابتدا ماتریسها و بردارهای صحنه را تنظیم می کنیم :


D3DXMatrixIdentity matWorld
d3dDevice.SetTransform D3DTS_WORLD, matWorld
D3DXMatrixRotationY matView, Rotation
D3DXMatrixLookAtLH matTemp, CameraPoint, ViewPoint, vec(0, 1, 0)
D3DXMatrixMultiply matView, matView, matTemp
d3dDevice.SetTransform D3DTS_VIEW, matView
D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500
d3dDevice.SetTransform D3DTS_PROJECTION, matProj


در پایان نیز شروع به رندر صحنه می کنیم :


d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, BackColor, 1, 0
d3dDevice.BeginScene
Sphere.DrawSubset 0
d3dDevice.EndScene
d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0

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

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