1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش DirectX-Graphic

شروع موضوع توسط minaaa ‏24/10/11 در انجمن Visual Basic

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    [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​
     
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    پاسخ : آموزش 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