[  Add to Bookmark  -  Make Home Page   ]      بازگشت به صفحه اول

آموزشDirectX-Graphic (قسمت سوم)


 ItMyTi.Com
جستجو در مطالب و مقالات


لينكدوني

مطالب گذشته
» ماهانه 15هزار مرسوله از طريق ثبت...
» آمار توزيع كارت هوشمند سوخت در كشور..
» برون‌سپاري پروژه‌هاي ICT بدون...
» ابزار شكستن قفل فعال‌سازي ويستا عرضه شد
» نگارش جديد ويروس استورم"...
» پياده‌سازي مديريت منابع سازماني تا...
» "يي‌آي ديجيتال" از شناسايي حفره ...
» موانع صدور گواهي ديجيتال رفع شد
» كانال ديتاي بين استانهاي زنجان و...
» عرضه خودرو شبكه ارتباطي در...
» استفاده ويروسهاي جديد از حافظه‌هاي...
» برنامه‌هاي توليدي بي‌بي‌سي...
» شركت "آدوب" نسخه اينترنتي نرم‌افزار...
» ويروس اينترنتي "رين‌بات" كارشناسان...
» ويروس اينترنتي "رين‌بات" كارشناسان...
» ۱۵‬هزار مرسوله پستي ماهانه باثبت‌نام...
» ماجراي ‪SMS‬هاي سرگردان در شبكه...
» شبكه ايرانسل شش شهر ديگر را دربر مي‌گيرد
» مسائل حقوقي،علت اجرا نشدن توافق...
» خاموش‌بودن موبايل مديران...
» جمع‌آوري امضا براي استيضاح وزير ارتباطات
» پست:اينترنتي ثبت نام كنيد
» نرم‌افزار ضدويروس جديد "مايكروسافت" ..
» در جمهوري استوني انتخابات اينترنتي برگزار مي‌شود
» جوانان ژاپني مي‌گويند تلفن همراه زندگي...
» انجام بازي‌هاي رايانه‌هاي رانندگان را به ...
» دو خبر از حوزه فناوري اطلاعات تهران
» عرضه كوچك‌‏ترين تراشه جهان در بازار مالزي
» رايانه‌اي پاك براي كودكان برگزار مي‌شود
» يك چيني معتاد به اينترنت بعد از هفت روز بازي آنلاين جان خود را از دست داد
» Reaper HPC جديدترين روش خنك كننده رم به بازار عرضه شد
» اينترنت از سايت‌هاي فيشينگ اشباع شده است
» تائید مالی دامنه ir بصورت 100% آنلاین
» مايكروسافت: بايد از موفقيت گوگل در ...
» راه اندازي سيستم هاي جديد سرگرمي ...
» شركت سيمانتك جديدترين ضدویروس...
» كرم تروژان با شيوه اي جديد در شبكه اينترنت
» محاكمه مشاور ارشد شركت امنيتي مك آفي
» ربات انسان‌نما حركات خود را اصلاح مي‌كند
» ويستا از نقص جديد در سيستم امنيتي خود ...

Niksalehi.com


پیوندها

نیک صالحی

نیک بازار

نیک دانلود

اوکسین ادز

آگهی رایگان

ایرانی

فروشگاه ساز مدرن

روز فارسی

پرشین وی

نیک بلاگ

نیک جاب

هو دات آی آر

نیک سایت

درناز

نیک دانلود

نیک لایو تی وی

اینگفا


اینروز

فروشگاه تجریش

نیک نیوز

سایت روز

پولک

تندرست

آی آر پارس

[ August 04, 2005 ] آموزشDirectX-Graphic (قسمت سوم)

iritn.com از: پرشين بلاگ
موضوع : رسم اشکال دو بعدي
مروري بر object هاي DirectX8
1 DirectX8 : اين شي ، شي مرکزي براي directX است و به شما امکان دسترسي به توابع و اشيا DirectX را مي دهد .

۲ - Direct3D8 : شي اصلي براي کار با محيط سه بعدي مي باشد . هدف از آن ، ساخت Direct3DDevice8 است و همچنين شامل توابعي براي مشخص کردن توانايي هاي کارت گرافيک است .

۳ - Direct3DDevice8 : اين شي مسئول ساخت بافتها textures ، مديريت نورها در يک صحنه ، مديريت مواد materials و همچنين render صحنه است . در واقع اين شي ، قلب نمايشي کار شماست .

4 - D3DX8 : گر چه هميشه نيازي به استفاده از اين شي نيست ، اما اين شي شامل توابعي براي ساخت برنامه هاي userfriendly تر توسط DirectX است .

مثلاً ساخت اشيا سه بعدي ( مثل کره ، مکعب و ... ) ، ساخت بافتها ، ساخت سطوح و غيره

شروع کار براي رسم اشيا دوبعدي

ابتدا ثابت FVF را تعريف مي کنيم . اين ثابت توصيف " فرمت قابل انعطاف نقطه flexible-vertex-format " براي يک vertex دو بعدي انتقال يافته و ساده شده مي باشد .

سپس بايستي يک ساختار براي توصيف اين vertex معرفي کنيم :

Const FVF = D3DFVF_XYZRHW Or D3DFVF_TEX1 Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR
Private Type TLVERTEX
X As Single
Y As Single
Z As Single
rhw As Single
color As Long
specular As Long
tu As Single
tv As Single
End Type

فرض کنيد بخواهيم يک مربع را در صفحه رسم کنيم . براي رسم آن نياز به 4 عدد vertex داريم . بنابراين آرايه TriStrip را از نوع TLVERTEX تعريف ميکنيم
:Dim TriStrip (0 To 3) As TLVERTEX

حال به سراغ تابع initialize که در درس ۱ با آن آشنا شديد مي رويم و دستورات زير را به آن اضافه مي کنيم :

Private Function Initialize as Boolean

.
.
.

ابتدا سيستم سايه زني vertex را طوري تنظيم مي کنيم که از FVF استفاده کند .
D3DDevice.SetVertexShader FVF

حال سيستم lighting را براي vertex هاي دو بعدي غير فعال مي کنيم زيرا نيازي به آن نداريم :
D3DDevice.SetRenderState D3DRS_LIGHTING,false
حال بايستي تابع initializeGeometry را اجرا کنيم . اين تابع را در ادامه توضيح خواهم داد . اگر نتيجه اين تابع true باشد دراينصورت initialize به درستي انجام شده است :
if initializeGeometry()=true then initialize=true
end function

تابع initializeGeometry در اين درس ، تابعي ساده است که تنها آرايه Vertex ها را مقدار دهي مي کند . براي رسم يک مربع نياز به مقداردهي ۴ vertex در جهت عقربه هاي ساعت داريم ( اين مربع شامل ۲ مثلث است )
Private Function InitialiseGeometry() As Boolean
On Error GoTo BOut:
color = RGB(200, 100, 0)
TriStrip(0) = CreateTLVertex(100, 100, 0, 1, color, 0, 0, 0)
TriStrip(1) = CreateTLVertex(300, 100, 0, 1, color, 0, 0, 0)
TriStrip(2) = CreateTLVertex(100, 300, 0, 1, color, 0, 0, 0)
TriStrip(3) = CreateTLVertex(300, 300, 0, 1, color, 0, 0, 0)
InitialiseGeometry = True
Exit Function
BOut:
InitialiseGeometry = False
End Function

همانطور که مشاهده مي کنيد براي تعريف vertex از تابع CreateTLVERTEX استفاده شده است . اين تابع صرفاً مقادير ساختار TLVERTEX را مقداردهي مي کند :

Private Function CreateTLVertex(X As Single, Y
As Single, Z As Single, rhw As Single, color As Long, specular
As Long, tu As Single, tv As Single) As TLVERTEX


نکته : ضمن اينکه شما مي توانيد مقادير اعشاري floating point را براي مختصاتهاي x و y و z بکار ببريد ، Direct3D مختصاتها را با گردکردن آنها تخمين مي زند و بنابراين ممکنست باعث ايجاد نتايج ناخواسته شود .
CreateTLVertex.X = X
CreateTLVertex.Y = Y
CreateTLVertex.Z = Z
CreateTLVertex.rhw = rhw
CreateTLVertex.color = color
CreateTLVertex.specular = specular
CreateTLVertex.tu = tu
CreateTLVertex.tv = tv
End Function
حال بايستي تابع Render را بنويسيم :
Public Sub Render()
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
D3DDevice.BeginScene
D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TriStrip(0), Len(TriStrip(0))x
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

ساختار اصلي براي اجراي توابع فوق بصورت زير است :
--Main part—
Initialize
Do While yourevent=true
Render
DoEvents
Loop



لينك مستقيم |

تمام حق و حقوق محفوظ است محل قرار دادن شمارنده در دست ساخت

کليه حقوق متعلق به سايت MCS-8051.COM ميباشد