[h=2][/h] آموزش DirectX-Graphic قسمت اول DirectX8 ابزاري براي ساخت تصاوير ثابت و متحرک دو بعدي و سه بعدي مي باشد . براي کار با DirectX8 ابتدا بايستي آنرا روي سيستم خود نصب کنيد . سپس در محيط vb از منوي project گزينه References را انتخاب کنيد . در فرمي که ظاهر مي شود اطمينان حاصل کنيد که گزينه DirectX8 for VB type library فعال باشد . براي کار با DirectX8 بايستي از تعريف نمودن شي پايه DirectX8 شروع نمود : Dim Dx as DirectX8 شي Direct3D8 براي کنترل اشيا سه بعدي بکار مي رود : Dim D3D as Direct3D8 شي Direct3DDevice8 ، سخت افزار مربوط به رندر تصاوير را مشخص مي کند : Dim D3DDevice as Direct3DDevice8 حال براي شروع کار با Direct3D ، تابع ( ) initialise را تعريف مي کنيم . اگر اينکار درست انجام شود تابع ، مقدار true را برمي گرداند : public function initialise () as boolean Dim DispMode as D3DISPLAYMODE شي D3DISPLAYMODE حالت نمايش را مشخص مي نمايد . Dim D3Dwindow as D3DPRESENT_PARAMETERS شي فوق مشخص مي کند که viewport شما چگونه باشد . حال شي اصلي DirectX8 را مي سازيم : Set Dx=New DirectX8 سپس شي اصلي ساخت واسط سه بعدي را مي سازيم : ()set D3D.Dx.Direct3Dcreate سپس حالت فعلي نمايش را با دستور زير استخراج مي کنيم : D3D.getadapterdisplaymode D3DADAPTER_DEFAULT,dispmode حال دو حالت براي کار با DirectX داريم : 1 - windowed mode 2 - fullscrean mode 1 - براي کار با حالت پنجره اي ابتدا اين موضوع را به DirectX اطلاع مي دهيم : D3Dwindow.windowed=1 سپس نوع referesh تصوير را مشخص مي کنيم ( در اينجا چند انتخاب وجود دارد که در صورت نياز به اطلاعات بيشتر با من تماس بگيريد . ) : D3Dwindow.swapeffect=D3DSWAPEFFECT_COPY_VSYNC سپس بايستي فرمت بافر نگهدارنده تصاوير را مشخص کنيم : D3Dwindow.backbufferformat=dispmode.format 2 - براي کار با حالت تمام صفحه ، ابتدا نوع refresh را مشخص کرده سپس تعداد بافر هاي تصوير و سرانجام نوع و سايز بافر را مشخص مي نمائيم : D3Dwindow.swapeffect=D3DSWAPEFFECT_DISCARD D3Dwindow.backbuffercount=1 D3Dwindow.backbufferformat=dispmode.format D3Dwindow.backbufferheight=dispmode.height D3Dwindow.backbufferwidth=dispmode.width سپس پنجره نمايش مشخص مي گردد : D3Dwindow.hdevicewindow=frmMain.hwnd @حال بايستی يک device ساخته شود که يا از طريق سخت افزار و يا نرم افزار تصاوير را رندر نمايد : Set D3DDevice=D3Dcreatedevice(D3DADAPTER_DEFAULT ,D3DDEVTYPE_HAL, frmMain.hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3Dwindow)x, end sub درصورتي که کارت گرافيک شما امکانات رندر سخت افزاري تصاوير را ندارد از D3DDEVTYPE_REF بجاي D3DDEVTYPE_HAL استفاده کنيد . حال بايستي روتين render را بنويسيم . البته در اين درس تصويري براي رندر نداريم و تنها چگونگي نوشتن اين روتين را بيان خواهم کرد : ۱ - ابتدا بايستي device مربوط به رندر ، قبل از کشيدن تصوير در آن پاک شود : D3DDevice.clear 0,byval 0,D3DCLEAR_TARGET,&H0,1#,0 عدد hex اي که در دستور فوق آمده رنگ زمينه صفحه را مشخص مي کند ۲ - سپس بايستي تصاوير مورد نظر را رندر کنيم . اينکار توسط دستورات زير انجام مي شود : D3DDevice.beginscence all rendering calls go between these two lines ' D3DDEvice.endscence 3 - در پايان بايستي صفحه را update کنيد : D3DDevice.present byval 0,byval 0,0,byval 0
پاسخ : آموزش DirectX-Graphic بخش دوم - Wait & Time 1- تابع Sleep هدف: از اين تابع براي ايجاد وقفه در اجراي برنامه استفاده ميشود. پارامترها : dwMiliSeconds: اين پارامتر از نوع Long مي باشد كه زمان وقفه را به ميلي ثانيه ميگيرد. خروجي تابع : ندارد فراخواني در VB : Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)2- تابع SleepEx هدف: كار اين تابع دقيقا مانند تابع Sleep ميباشد با اين تفاوت كه اول يك مقدار خروجي دارد و در واقع زير برنامه نيست و ثانيا يك متغير اضافه دارد كه براي كارهاي I\O و ايجاد وقفه براي آنها به كار مي رود. پارامترها : dwMiliSeconds: اين پارامتر از نوع Long مي باشد كه زمان وقفه را به ميلي ثانيه ميگيرد. bAltertable : تا زماني كه اين متغير False باشد اجازه عمليات I\O در مدت زمان وقفه داده نميشود. اگر ايت متغير True باشد اجازه فعاليت I\O با تابع هاي (WriteFile,ReadFileEx) داده ميشود. خروجي تابع : اگر زمان تمام شود مقدار خروجي 0 ميباشد و اگر مقدار خروجي برار با WAIT_IOCOMPLETION باشد كه برابر مقدار عددي H00c0 ميباشد، مشخص ميشود كه هنوز زمان به پايان نرسيده. فراخواني در VB : Public Declare Function SleepEx Lib "kernel32" Alias "SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long 3- تابع FileTimeToLocalFileTime هدف: اين تابع زمان و تاریخ پایه و اصلی فایل را به زبان و تاریخ بین المللی تبدیل میکند. پارامترها : lpFileTime: اين پارامتر یک متغیر از نوع ساختار FILETIME بوده و متغیری میباشد که قرار است تبدیل شود. lpLocalFileTime: این پارامتر هم یک متغیر از نوع FILETIME است با این فرق که این زمان تبدیل شده به زمان بین المللی میباشد. ساختار در VB: Type FILETIME dwLowDataTime32 As Long dwHighDataTime32 As Long End Type توضیح ساختار : dwLowDataTime32 : بیت پایین تاریخ و ساعت dwHighDataTime32 : بیت بالای تاریخ و ساعت خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function FileTimeToLocalFileTime Lib "kernel32" Alias "FileTimeToLocalFileTime" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long 4- تابع LocalFileTimeToFileTime هدف: اين تابع دقیقا برعکس تابع قبل عمل میکند در واقع زمان و تاریخ بین المللی فایل را به زمان و تاریخ فایل تبدیل میکند. پارامترها : lpFileTime: اين پارامتر یک متغیر از نوع ساختار FILETIME بوده و این پارامتر زمان تبدیل شده را در خود نگه میدارد. lpLocalFileTime: این پارامتر هم یک متغیر از نوع FILETIME است و در آن ژمان بین المللی که قرار است تبدیل شود قرار دارد. خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function LocalFileTimeToFileTime Lib "kernel32" Alias "LocalFileTimeToFileTime" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long 5- تابع GetLocalTime هدف: اين تابع که از نوع برنامه (VOID) میباشد زمان و تاریخ فعلی سیستم را برمیگرداند. پارامترها : lpSystemTime: اين پارامتر یک متغیر از نوع ساختار SYSTEMTIME بوده و زمانو تاریخ کنونی سیستم در این متغیر قرار میگیرد. ساختار در VB: Type SYSTEMTIME wYear As Integer wMonth As Integer wDayofWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilisecond As Integer End Type توضیح ساختار : wYear : این فیلد از نوع عددی بوده و شامل سال میباشد. wMonth : این فیلد از نوع عددی بوده و شامل ماه میباشد. wDayofWeek : این فیلد از نوع عددی بوده و شامل شماره روز میباشد. wDay : این فیلد از نوع عددی بوده و شامل روز میباشد. wHour : این فیلد از نوع عددی بوده و شامل ساعت میباشد. wMinute : این فیلد از نوع عددی بوده و شامل دقیقه میباشد. wSecond : این فیلد از نوع عددی بوده و شامل ثانیه میباشد. wMilisecond : این فیلد از نوع عددی بوده و شامل میلی ثانیه میباشد. فراخواني در VB : Public Declare Sub GetLocalTime Lib "kernel32" Alias "GetLocalTime" (lpSystemTime As SYSTEMTIME) 6- تابع SetLocalTime هدف: اين تابع زمان و تاریخ فعلی سیستم را به زمان و تاریخ دلخواه تغیر میدهد. پارامترها : lpSystemTime: اين پارامتر یک متغیر از نوع ساختار SYSTEMTIME بوده و باید قبل از استفاده در تابع مزبور مقداردهی شود. تذکر: در این تابع SystemTime.wDayofWeek را نمیتوان Set کرد. خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function SetLocalTime Lib "kernel32" Alias "SetLocalTime" (lpSystemTime As SYSTEMTIME) As Long 7- تابع GetSystemTime هدف: اين تابع از نوع زیر برنامه (Void) میباشد، زمان و تاریخ فعلی سیستم را به متغیر خود برمیگرداند. پارامترها : پارامترهای این تابع مانند تابع GetLocalTime میباشد. فراخواني در VB : Public Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" (lpSystemTime As SYSTEMTIME) 8- تابع SetSystemTime هدف: اين تابع زمان و تاریخ فعلی سیستم را به زمان و تاریخ دلخواه تغیر میدهد. پارامترها : lpSystemTime: اين پارامتر یک متغیر از نوع ساختار SYSTEMTIME بوده و باید قبل از استفاده در تابع مزبور مقداردهی شود. تذکر: در این تابع SystemTime.wDayofWeek را نمیتوان Set کرد. خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function SetSystemTime Lib "kernel32" Alias "SetSystemTime" (lpSystemTime As SYSTEMTIME) As Long 9- تابع FileTimeToSystemTime هدف: اين تابع تاریخ و زمان فایل را به زمان و تاریخ 64 بیتی System تبدیل میکند. پارامترها : lpFileTime: اين پارامتر یک متغیر از نوع ساختار FILETIME بوده و متغیری میباشد که قرار است تبدیل شود. lpSystemTime: این پارامتر متغیری است از نوع SYSTEMTIME که برای دریافت زمان و تاریخ سیستم به کار میرود. خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function FileTimeToSystemTime Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long 10- تابع SystemTimeToFileTime هدف: اين تابع تاریخ و زمان سیستم را به زمان و تاریخ فایل تبدیل میکند. پارامترها : lpFileTime: اين پارامتر یک متغیر از نوع ساختار FILETIME بوده که پس از تبدیل زمان و تاریخ از نوع ساختار FILETIME در آن قرار میگیرد. lpSystemTime: این پارامتر متغیری است از نوع SYSTEMTIME که باید به FILETIME تبدیل شود. خروجي تابع : از نوع Boolean بوده و در صورتی که تابع کارش را به درستی انجام دهد مقدار True یا یک و در غیر این صورت مقدار False یا صفر را برمیگرداند. فراخواني در VB : Public Declare Function SystemTimeToFileTime Lib "kernel32" Alias "SystemTimeToFileTime" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long