تعريف شبكه فن‌آوري اطلاعات به عنوان صفحه اصلي

جمعه 28 اسفند 1388
تعداد كاربران آنلاين: 31

فهرست

  اخبار
  مقالات
  مصاحبه‌ها
  نكته‌ها و ترفندها
  قوانين و مقررات
  دريافت نرم‌افزار
  آموزش
  نمايشگاه ‌و همايش‌
  بازيهاي رايانه‌اي
  گزارش
  تبـليغــات
حضرت محمد (ص)

عمل اندك همراه با دانش، بهتر از عمل بسیار همراه با نادانی است.


تصويب كليات لايحه‌ي صيانت از فيبر نوري            بخش خصوصی نیازمند حمایت دولت است            تلفن هاي رايانه اي به زودي به بازار مي آيند            مرورگر اينترنتي جديد كه با صدا كار مي كند            ديواره هاى آتش (Firewall) چيستند؟            امكان گشت‌وگذار در اينترنت به صورت آف‌لاين فراهم شد!            دانلود آهنگ های مختلف به شکل رایگان از گوگل            اطلاعات پروازي مورد نياز از طريق تلفن گويا, SMS و پيام‌‏نما در اختيار زائران و م             نخستين ويروس آيفون استراليا را درنورديد            پريز برق جيبي ساخته شد!            ویروس های اینترنتی هفته اول آبان ماه            دوربین دیجیتال با امکان email تصاویر به بازار آمد            آموزش XML            بررسي نقش و جايگاه دانشگاه و صنعت در توسعه ي علمي، صنعتي و اقتصادي(1)            AMD فناوري مجازي سازي خود را معرفي مي‌‏كند            25 درصد نرم افزارهاي آيفون رايگان است            اضافه کردن پسورد دوم براي ورود به ویندوز XP            ياهو و سيمانتك براي ارائه خدمات امنيتي اينترنتي متحد مي‌شوند            سيستم رايانه‌يي ناوبري ماهواره‌يي خودرو طراحي و پياده سازي شد            عمرDVD هايتان دراز باد!            

مباحث پيشرفته Direct3D ( مقدمه )

تبــليغـــات

ارسال SMS در ویندوز!

ارسال پیامک تکی/گروهی
دریافت پیامک با تفکیک نام و گروه
سیستم زمانبندی اتوماتیک ارسال SMS

همگی در نرم افزار KeyanaSMS نسخه تجاری (مقیم در TrayBar ویندوز)

حتما با ما تماس بگیرید: 8455355-0511 (10 خط) داخلی 102

پنج شنبه,30 مرداد 1384 (تعداد دفعات خوانده شده:2527)



از: سايت پرشين بلاگ

موضوع : مروري بر مباحث قبلي - ساخت يک موتور گرافيکي سه بعدي

قبل از شروع مباحث جديد برنامه نويسي Direct3D ، با هم مروري بر مباحث قبلي خواهيم داشت .
در اين درس با استفاده از مطالب قبلي يک Engine سه بعدي ساخته و از امکانات آن در يک برنامه نمونه استفاده خواهيم کرد .

اين engine داراي دو کلاس است :
1 – کلاس MainD3D
2 – کلاس D3Dobject
در کلاس MainD3D متغيرها و توابع لازم براي ساخت يک device سه بعدي ، تنظيمات ماتريسي ، تابع رندر و غيره موجود مي باشد .
متغيرهاي عمومي اين کلاس عبارتند از :
Public g_DX As New DirectX8
Public g_D3D As Direct3D8
Public g_D3DX As New D3DX8
Public g_D3DDevice As Direct3DDevice8
Public NTextures As Long
روتين ها و توابع اين کلاس عبارتند از :
1 - InitD3D : اين روتين ، اشيا D3D و D3Ddevice را مي سازد و پارامترهاي آنها را تنظيم مي کند .
2 – ApplyCameraChanges : روتين ايجاد ماتريس View
3 – SetupMatrices : روتين ايجاد ماتريس Projection
4 – StartRender : در اين روتين عمليات لازم براي شروع عمل رندر صورت مي گيرد .
5 – RenderObject : اين تابع ، يک شي سه بعدي از نوع کلاس D3Dobject را مي گيرد و بردارهاي مورد نياز و نيز بافت شي را تنظيم مي کند و در پايان شي را ترسيم مي کند .
6 – FinishRender : در اين روتين به عمليات رندر پايان داده مي شود .
7 – Cleanup: روتين از بين بردن اشيا Direct3D
8 – CreateVector : تابع ساخت يک بردار سه بعدي
9 – CreateTextures : روتين ساخت يک بافت جديد
10 – InitTexture: تابع مقداردهي به يک بافت


در کلاس D3Dobject متغيرها و توابع لازم براي ايجاد يک شي سه بعدي و اختصاص بافت به آن موجود مي باشد .
در اين کلاس دو type عمومي تعريف شده است :
1 - NormalVERTEX
2 - TeturedVERTEX
همچنين روتين ها و توابع اين کلاس عبارتند از :
1 – InitObject : تابعي که تنظيمات اوليه vertex ها و بافت شي را انجام مي دهد .
2 – Vertex : روتين ايجاد vertex هاي مورد نياز
3 – GetRenderingMode: تابعي که مد رندر را مشخص مي کند .
و نيز يکسري تابع ساخت vertex نرمال و ساخت vertex داراي بافت و غيره

اين دو کلاس در يک پروژه ويژوال بيسيک قرارداده شده و پروژه با نام D3Dengine.dll کامپايل شده است .
حال با استفاده از اين engine مي خواهيم يک منظره سه بعدي را ايجاد کنيم :
اين منظره شامل سه object است : ديوار ، آسمان و زمين.

ابتدا بايد يک شي از کلاس MainD3D تعريف کنيم :
Dim D3D8Main As MainD3D8
در متد Form Load نيز سه شي Floor ، Sky و Wall را بصورت زير تعريف مي کنيم :
Dim Floor As D3DObject
Dim Sky As D3DObject
Dim Walls As D3Dobject

سپس اين سه شي را به اضافه شي D3D8Main ، ايجاد مي کنيم :
Set D3D8Main = New D3DEngine.MainD3D8
Set Floor = New D3DEngine.D3DObject
Set Sky = New D3DEngine.D3DObject
Set Walls = New D3DEngine.D3Dobject
در ابتدا شي MainD3D را Initial مي کنيم و سپس بافتهاي مورد نيز خود را مي سازيم :
D3D8Main.InitD3D True, Me.hWnd
D3D8Main.CreateTextures 3
D3D8Main.InitTexture 1, App.Path + "\floor.jpg"
D3D8Main.InitTexture 2, App.Path + "\sky.bmp"
D3D8Main.InitTexture 3, App.Path + "\wall.bmp"

حال به سراغ ايجاد و مقداردهي vertex هاي floor مي رويم . floor شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :
Floor.InitObject 6, 2, TriangleList, True, 1

Floor.Vertex 0, -55, -2, -55, vbWhite, 0, 10
Floor.Vertex 1, 55, -2, -55, vbWhite, 10, 10
Floor.Vertex 2, 55, -2, 55, vbWhite, 10, 0
Floor.Vertex 3, -55, -2, -55, vbWhite, 0, 10
Floor.Vertex 4, 55, -2, 55, vbWhite, 10, 0
Floor.Vertex 5, -55, -2, 55, vbWhite, 0, 0
سپس به سراغ ايجاد و مقداردهي vertex هاي wall مي رويم . wall شامل بيست و چهار vertex مي باشد و بنابراين هشت face مثلثي دارد :
Walls.InitObject 24, 8, TriangleList, True, 3

Walls.Vertex 0, -55, -2, -55, &HBCE8FC, 0, 1
Walls.Vertex 1, 55, -2, -55, &HBCE8FC, 5, 1
Walls.Vertex 2, 55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 3, -55, -2, -55, &HBCE8FC, 0, 1
Walls.Vertex 4, 55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 5, -55, 8, -55, &HBCE8FC, 0, 0

Walls.Vertex 6, -55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 7, 55, -2, 55, &HBCE8FC, 5, 1
Walls.Vertex 8, 55, 8, 55, &HBCE8FC, 5, 0
Walls.Vertex 9, -55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 10, 55, 8, 55, &HBCE8FC, 5, 0
Walls.Vertex 11, -55, 8, 55, &HBCE8FC, 0, 0

Walls.Vertex 12, -55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 13, -55, -2, -55, &HBCE8FC, 5, 1
Walls.Vertex 14, -55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 15, -55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 16, -55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 17, -55, 8, 55, &HBCE8FC, 0, 0

Walls.Vertex 18, 55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 19, 55, -2, -55, &HBCE8FC, 5, 1
Walls.Vertex 20, 55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 21, 55, -2, 55, &HBCE8FC, 0, 1
Walls.Vertex 22, 55, 8, -55, &HBCE8FC, 5, 0
Walls.Vertex 23, 55, 8, 55, &HBCE8FC, 0, 0

حال به سراغ ايجاد و مقداردهي vertex هاي sky مي رويم . sky شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :
Sky.InitObject 6, 2, TriangleList, True, 2

Sky.Vertex 0, -55, 8, -55, &HBCE8FC, 0, 1
Sky.Vertex 1, 55, 8, -55, &HBCE8FC, 0, 1
Sky.Vertex 2, 55, 8, 55, &HBCE8FC, 0, 1
Sky.Vertex 3, -55, 8, -55, &HBCE8FC, 0, 1
Sky.Vertex 4, 55, 8, 55, &HBCE8FC, 0, 1
Sky.Vertex 5, -55, 8, 55, &HBCE8FC, 0, 1

در پايان تابع رندر را صدا مي کنيم . البته در هر بار عمل رندر کردن ، دوربين يک درجه در صفحه X-Z دوران مي کند تا کل ديوار قابل مشاهده باشد :
Dim Angle As Double
PI = 3.1415
Angle = 0
Do
DoEvents
D3D8Main.StartRender vbBlack
D3D8Main.RenderObject Sky
D3D8Main.RenderObject Floor
D3D8Main.RenderObject Walls
D3D8Main.FinishRender
If Sqr(Angle ^ 2) = 360 Then Angle = 0
Angle = Angle + 1
D3D8Main.CamLookAtX = Sin((Angle * 2 * PI) / 360)
D3D8Main.CamLookAtZ = Cos((Angle * 2 * PI) / 360)
D3D8Main.ApplyCameraChanges
Loop

 

نسخه قابل چاپ              برگشت

عناوين مرتبط
1- مباحث پيشرفته Direct3D (درس چهارم) یک شنبه,30 شهريور 1384
2- مباحث پيشرفته Direct3D (درس سوم ) پنج شنبه,28 شهريور 1384
3- مباحث پيشرفته Direct3D (درس دوم ) چهارشنبه,12 شهريور 1384
4- مباحث پيشرفته Direct3D (درس اول) شنبه,7 شهريور 1384



نظرات كاربران



با قراردادن كد ذيل مي‌توانيد از سيستم نمايشگار اخبار ما بصورت رايگان در سايت/وبلاگ خود استفاده كنيد
 

معرفي شبكه فن آوري اطلاعات ايران به يك دوست

ايميل شما:
ايميل دوستتان:

تبـليغــات

تبليغات داخلي ...


حاميان ما ...


نقل اخبار/اطلاعات ساير سايتها/پايگاه‌ها لزوما به معناي تائيد آنها نيست، بلكه مسئوليت تمامي مطالب ارسالي به عهده پايگاه‌هاي مربوطه مي‌باشد
نقل مطالب سايت با ذکر منبع (www.IRITN.com) و نام نويسنده مجاز است.
All rights reserved. Copyright 2003-2010 by KEYANA IT Co.  Computed in 0.10 seconds
(Best Viewed With IE 6.0 or higher (1024x768