ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





نمایش نتایج: از 1 به 5 از 5
  1. #1
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    آموزش 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
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  2. #2
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    برنامه نویسی Direct3D

    1. شمارش تعداد آداپتورهای گرافیکی یک سیستم
    فرض کنید متغیر nAdapters متغیری از نوع Long باشد. همچنین شی D3DADAPTER_IDENTIFIER8 یک ساختار است که اطلاعات مربوط به آداپتور را نگه می دارد. در اینصورت روتین EnumerateAdapters بصورت زیر خواهد بود:
    کد:
    کد:
    کد:
     Dim AdapterInfo As D3DADAPTER_IDENTIFIER8
    
    Private Sub EnumerateAdapters
       Dim i As Integer
        
       nAdapters = D3D.GetAdapterCount
    برای بدست آوردن جزئیات آداپتورها بصورت زیر عمل می کنیم:
    کد:
    کد:
    کد:
     For i = 0 To nAdapters - 1
          D3D.GetAdapterIdentifier i, 0, AdapterInfo
    نام آداپتور بصورت لیستی از کدهای اسکی است که بایستی آنها را درون یک String قرار دهیم:
    کد:
    کد:

    کد:
     Name = ""
    
          For J = 0 To 511
             Name = Name & Chr$(AdapterInfo.Description(J))
          Next J
    
          Name = Replace(sTemp, Chr$(0), " ")
       Next i
    End Sub
    بنابراین در متغیر Name نام آداپتور قرار خواهد گرفت.


    2. مشخص کردن نوع Rendering
    فرض کنید شی D3DCAPS8 توانایی Rendering آداپتور را نشان دهد. در اینصورت روتین EnumerateDevices بصورت زیر خواهد بود:
    کد:
    کد:

    کد:
     Private Sub EnumerateDevices()
    On Local Error Resume Next
    Dim Caps As D3DCAPS8
    Dim deviceindex As Long
    
    deviceindex = 0 'For Example
    
    D3D.GetDeviceCaps deviceindex, D3DDEVTYPE_HAL, Caps
        If Err.Number = D3DERR_NOTAVAILABLE Then
            MsgBox("Reference Rasterizer (REF)")
    اگر آداپتور امکان رندر سخت افزاری نداشته باشد در اینصورت:
    کد:
    کد:

    کد:
     Else
            MsgBox("Hardware Acceleration (HAL) + Reference Rasterizer (REF)")
        End If
    End Sub
    3. شمارش تعداد Mode نمایشی آداپتور
    فرض کنید در صورت REF بودن امکان رندر، متغیر r=2 و در غیراینصورت r=1 باشد . همچنین شی D3DDISPLAYMODE اطلاعات مدهای نمایشی را در خود داشته باشد و متغیر nModes از نوع Long باشد. در اینصورت روتین EnumerateDispModes بصورت زیر خواهد بود:
    کد:
    کد:

    کد:
     Private Sub EnumerateDispModes(r As Long)
       Dim i As Integer
       Dim mode_tmp As D3DDISPLAYMODE
       Dim deviceindex As Long
    
       deviceindex=0 'For Example
    
       nModes = D3D.GetAdapterModeCount(deviceindex)
    
       For i = 0 to nModes - 1
          D3D.EnumAdapterModes(deviceindex, i, mode_tmp)
    ابتدا Modeها را به دو گروه ۱۶ بیتی و ۳۲ بیتی تقسیم می کنیم:
    کد:
    کد:

    کد:
    If mode_tmp.Format = D3DFMT_R8G8B8 Or mode_tmp.Format = D3DFMT_X8R8G8B8 Or mode_tmp.Format = D3DFMT_A8R8G8B8 Then
    حال چک می کنیم که Device قابل پذیرش و معتبر است یا نه:
    کد:
    کد:

    کد:
      If D3D.CheckDeviceType(deviceindex, r, mode_tmp.Format, mode_tmp.Format,
    Flase) >= 0 Then
                MsgBox(mode_tmp.Width & "X" & mode_tmp.Height & "32 Bit [FMT:" &
    mode_tmp.Format & "]"
             End If
          Else
             If D3D.CheckDeviceType(deviceindex, r, mode_tmp.Format, mode_tmp.Format,
    Flase) >=0 Then
                MsgBox(mode_tmp.Width & "X" & mode_tmp.Height & "16 Bit [FMT:" &
    mode_tmp.Format & "]"
             End If
          End If
       Next i
    End Sub
    4. مشخص کردن توانایی های آداپتور گرافیکی
    فرض کنید در صورت REF بودن امکان رندر، متغیر r=2 و در غیراینصورت r=1 باشد:
    کد:
    کد:
    کد:
     Private Sub EnumerateHardware(r as long)
       Dim caps As D3DCAPS8
       Dim deviceindex As Long
    
       deviceindex=0 'For Example
       D3D.Getdevicecaps deviceindex, r, caps
    
       If Caps.MaxActiveLights = -1 Then
          MsgBox "Maximum Active Lights: Unlimited" 
       Else
          MsgBox "Maximum Active Lights: " & Caps.MaxActiveLights
       End If
    
       MsgBox "Maximum Point Vertex size: " & Caps.MaxPointSize
       MsgBox "Maximum Texture Size: " & Caps.MaxTextureWidth & "X" & Caps.MaxTextureHeight
       MsgBox "Maximum Primatives in one call: " & Caps.MaxPrimitiveCount
    
       If Caps.TextureCaps And D3DPTEXTURECAPS_SQUAREONLY Then
          MsgBox "Textures must always be square" 
       End If
    
       If Caps.TextureCaps And D3DPTEXTURECAPS_CUBEMAP Then
          MsgBox "Device Supports Cube Mapping" 
       End If
    
       If Caps.TextureCaps And D3DPTEXTURECAPS_VOLUMEMAP Then
          MsgBox "Device Supports Volume Mapping" 
       End If
    
       If Caps.DevCaps And D3DDEVCAPS_PUREDEVICE Then
          MsgBox "Device supports the Pure Device Option" 
       End If
    
       If Caps.DevCaps And D3DDEVCAPS_HWTRANSFORMANDLIGHT Then
          MsgBox "Device supports hardware transform and lighting" 
       End If
    
       If Caps.DevCaps And D3DDEVCAPS_HWRASTERIZATION Then
          MsgBox "Device can use Hardware Rasterization" 
       End If
    
       If Caps.Caps2 And D3DCAPS2_CANCALIBRATEGAMMA Then
          MsgBox "Device can Calibrate Gamma" 
       End If
    
       If Caps.Caps2 And D3DCAPS2_CANRENDERWINDOWED Then
          MsgBox "Device can Render in Windowed Mode" 
       End If
    
       If Caps.Caps2 And D3DCAPS2_FULLSCREENGAMMA Then
          MsgBox "Device can calibrate gamma in fullscreen mode" 
       End If
    
       If Caps.RasterCaps And D3DPRASTERCAPS_FOGRANGE Then
          MsgBox "Device supports range based fog calculations" 
       End If
    
       If Caps.RasterCaps And D3DPRASTERCAPS_ANISOTROPY Then
          MsgBox "Device supports Anisotropic Filtering" 
       End If
    
       If Caps.RasterCaps And D3DPRASTERCAPS_ZBUFFERLESSHSR Then
          MsgBox "Device does not require a Z-Buffer/Depth Buffer" 
       End If
    End Sub
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  3. #3
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    برنامه نویسی Direct3D

    شروع کار برای رسم اشیا دوبعدی
    ابتدا ثابت 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
    حال به سراغ تابع Initialise که در درس 1 با آن آشنا شدید می رویم و دستورات زیر را به آن اضافه می کنیم:

    ابتدا سیستم سایه زنی Vertex را طوری تنظیم می کنیم که از FVF استفاده کند:
    کد:
    D3DDevice.SetVertexShader FVF
    حال سیستم Lighting را برای Vertex های دو بعدی غیر فعال می کنیم زیرا نیازی به آن نداریم:
    کد:
    کد:

    کد:
     D3DDevice.SetRenderState D3DRS_LIGHTING, False
    حال بایستی تابع InitializeGeometry را اجرا کنیم. این تابع را در ادامه توضیح خواهم داد. اگر نتیجه این تابع True باشد دراینصورت Initialise به درستی انجام شده است:
    کد:
    کد:

    کد:
     If InitialiseGeometry() = True Then
       Initialise = True
       Exit Function
    End If
    تابع InitialiseGeometry در این درس، تابعی ساده است که تنها آرایه Vertex ها را مقدار دهی می کند. برای رسم یک مربع نیاز به مقداردهی ۴ Vertex در جهت عقربه های ساعت داریم. ( این مربع شامل ۲ مثلث است)


    کد:
    کد:

    کد:
     Private Function InitialiseGeometry() As Boolean
    
       On Error GoTo BailOut:
    
       TriStrip(0) = CreateTLVertex(100, 100, 0, 1, RGB(255, 255, 255), 0, 0, 0)
       TriStrip(1) = CreateTLVertex(300, 100, 0, 1, RGB(255, 0, 0), 0, 0, 0)
       TriStrip(2) = CreateTLVertex(100, 300, 0, 1, RGB(0, 255, 0), 0, 0, 0)
       TriStrip(3) = CreateTLVertex(300, 300, 0, 1, RGB(0, 0, 255), 0, 0, 0)
    
       InitialiseGeometry = True
       Exit Function
    
       BailOut:
       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
       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
    نکته: شما می توانید مقادیر اعشاری Floating Point را برای مختصاتهای x و y و z بکار ببرید، اما Direct3D مختصاتها را با گردکردن آنها تخمین می زند و بنابراین ممکن است باعث ایجاد نتایج ناخواسته شود.

    حال بایستی تابع 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))
       D3DDevice.EndScene
    
       D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
    
    End Sub
    ساختار اصلی برای اجرای توابع فوق بصورت زیر است:
    کد:
    کد:

    کد:
     Initialize
    
    Do While YourEvent = True
       Render
       DoEvents
    Loop
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  4. #4
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    برنامه نویسی Direct3D

    [B]برنامه نویسی Direct3D در ویژوال بیسیک (قسمت چهارم)[/B]
    [B]Vertex[/B]:
    یک نقطه در فضای سه بعدی که برای دادن موقعیت، Scale و زاویه یک Face استفاده می شود.

    [B]Face[/B]:
    یک چند ضلعی که توسط مجموعه*ای از نقاط به نام Vertex ساخته می شود.

    [B]Mesh[/B]:
    مش، مجموعه*ای از Faceها است که یک شی سه بعدی را روی صفحه تشکیل می دهند.

    Direct3D از ساختاری بنام D3DVERTEX برای نمایش یک Vertex استفاده می کند. برای ساخت Face نیز از آرایه*ای از Vertexها استفاده می شود. آرایه همیشه بایستی قابل تقسیم به سه باشد زیرا اشکال از Faceهای مثلثی ساخته می شوند. هنگامیکه این مثلثها کنار هم گذاشته شوند، شی سه بعدی را می سازند. Direct3D از بافری با نام Index Buffer استفاده می کند که به Direct3D می گوید با چه ترتیبی Vertexها را رسم نماید. Indexها بایستی همیشه در جهت عقربه*های ساعت مشخص شوند.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  5. #5
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

    برنامه نویسی Direct3D

    در این درس می خواهیم یک مربع که دارای بافت می باشد، رسم کنیم. برای اینکار از کتابخانه کمکی D3DX8 و همچنین شی Direct3DTexture8 استفاده می نمائیم.
    کد:
    کد:

    کد:
         Dim D3DX As D3DX8
        Dim Texture As Direct3DTexture8
    حال بایستی در تابع Initialize بافت مربوطه را از روی یک فایل تصویری Load کنیم:
    کد:
    کد:

    کد:
         Private Function Initialize() As Boolean
          . 
          .
          .
          Set Texture = D3DX8.CreateTextureFromFile(D3DDevice, App.Path & yourfilename)
        End Function
    تابع Render نیز بصورت زیر خواهد بود:
    کد:
    کد:

    کد:
         Private Sub Render()
          D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
          D3DDevice.BeginScence
          D3DDevice.SetTexture 0, Texture
          D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TripStrip(0), Len(TriStrip(0))
          .
          .
          .
        End Function
    منبع :دانشجويان پيام نور
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
نمایش نتایج: از 1 به 5 از 5

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

Content Relevant URLs by vBSEO 3.6.0 RC 2