صفحه 3 از 3 نخستنخست 123
نمایش نتایج: از شماره 21 تا 30 , از مجموع 30

موضوع: آموزش DirectX-Graphic

  1. #21
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    مقدار ambient يک کد هگزا RRGGBB است .
    بعد از دستورات فوق ماتريسهاي matworld ، matview و matproj مطابق مطابل درس قبل تعريف مي شوند . پس از آن بايستي بافت مکعب را از درون فايل تصويري مورد نظرتان load کنيد :


    Set CubeTexture = D3DX.CreateTextureFromFileEx(D3DDevice, yourfilename, 128, 128, D3DX_DEFAULT, 0, DispMode.Format, D3DPOOL_MANAGED, D3DX_FILTER_LINEAR, D3DX_FILTER_LINEAR, 0, ByVal 0, ByVal 0)x


    حال بايستي تابع InitializeGeometry صدا زده شود و سپس تابع SetupLights فراخواني شوند . ابتدا به توضيح تابع InitializeGeometry مي پردازيم :


    Private Function InitialiseGeometry() As Boolean


    ابتدا يک بردار نرمال تعريف مي کنيم :


    Dim vN As D3DVECTOR


    سپس آرايه cube2 را با مقادير عددي پر مي کنيم . نرمالهاي تمام vertex ها را ابتدا با بردار
    [0,0,0 ] تعريف مي کنيم . اين مقدا بعداً تغيير خواهد کرد :


    Cube2(0) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 0)
    Cube2(1) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(2) = CreateVertex(-1, 1, 1, 0, 0, 0, 0, 1)
    vN = GenerateTriangleNormals(Cube2(0), Cube2(1), Cube2(2))
    Cube2(0).nx = vN.X: Cube2(0).ny = vN.Y: Cube2(0).nz = vN.Z
    Cube2(1).nx = vN.X: Cube2(1).ny = vN.Y: Cube2(1).nz = vN.Z
    Cube2(2).nx = vN.X: Cube2(2).ny = vN.Y: Cube2(2).nz = vN.Z


    Cube2(3) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(4) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 0)
    Cube2(5) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 0)
    vN = GenerateTriangleNormals(Cube2(3), Cube2(4), Cube2(5))
    Cube2(3).nx = vN.X: Cube2(3).ny = vN.Y: Cube2(3).nz = vN.Z
    Cube2(4).nx = vN.X: Cube2(4).ny = vN.Y: Cube2(4).nz = vN.Z
    Cube2(5).nx = vN.X: Cube2(5).ny = vN.Y: Cube2(5).nz = vN.Z

    'Back
    Cube2(6) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 1)
    Cube2(7) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 1)
    Cube2(8) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    vN = GenerateTriangleNormals(Cube2(6), Cube2(7), Cube2(8))
    Cube2(6).nx = vN.X: Cube2(6).ny = vN.Y: Cube2(6).nz = vN.Z
    Cube2(7).nx = vN.X: Cube2(7).ny = vN.Y: Cube2(7).nz = vN.Z
    Cube2(8).nx = vN.X: Cube2(8).ny = vN.Y: Cube2(8).nz = vN.Z

    Cube2(9) = CreateVertex(1, -1, -1, 0, 0, 0, 1, 0)
    Cube2(10) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(11) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 1)
    vN = GenerateTriangleNormals(Cube2(9), Cube2(10), Cube2(11))
    Cube2(9).nx = vN.X: Cube2(9).ny = vN.Y: Cube2(9).nz = vN.Z
    Cube2(10).nx = vN.X: Cube2(10).ny = vN.Y: Cube2(10).nz = vN.Z
    Cube2(11).nx = vN.X: Cube2(11).ny = vN.Y: Cube2(11).nz = vN.Z

    'Right
    Cube2(12) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(13) = CreateVertex(-1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(14) = CreateVertex(-1, 1, -1, 0, 0, 0, 1, 0)
    vN = GenerateTriangleNormals(Cube2(12), Cube2(13), Cube2(14))
    Cube2(12).nx = vN.X: Cube2(12).ny = vN.Y: Cube2(12).nz = vN.Z
    Cube2(13).nx = vN.X: Cube2(13).ny = vN.Y: Cube2(13).nz = vN.Z
    Cube2(14).nx = vN.X: Cube2(14).ny = vN.Y: Cube2(14).nz = vN.Z

    Cube2(15) = CreateVertex(-1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(16) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(17) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 1)
    vN = GenerateTriangleNormals(Cube2(15), Cube2(16), Cube2(17))
    Cube2(15).nx = vN.X: Cube2(15).ny = vN.Y: Cube2(15).nz = vN.Z
    Cube2(16).nx = vN.X: Cube2(16).ny = vN.Y: Cube2(16).nz = vN.Z
    Cube2(17).nx = vN.X: Cube2(17).ny = vN.Y: Cube2(17).nz = vN.Z

    'Left
    Cube2(18) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 0)
    Cube2(19) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(20) = CreateVertex(1, -1, -1, 0, 0, 0, 0, 0)
    vN = GenerateTriangleNormals(Cube2(18), Cube2(19), Cube2(20))
    Cube2(18).nx = vN.X: Cube2(18).ny = vN.Y: Cube2(18).nz = vN.Z
    Cube2(19).nx = vN.X: Cube2(19).ny = vN.Y: Cube2(19).nz = vN.Z
    Cube2(20).nx = vN.X: Cube2(20).ny = vN.Y: Cube2(20).nz = vN.Z

    Cube2(21) = CreateVertex(1, -1, 1, 0, 0, 0, 0, 1)
    Cube2(22) = CreateVertex(1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(23) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    vN = GenerateTriangleNormals(Cube2(21), Cube2(22), Cube2(23))
    Cube2(21).nx = vN.X: Cube2(21).ny = vN.Y: Cube2(21).nz = vN.Z
    Cube2(22).nx = vN.X: Cube2(22).ny = vN.Y: Cube2(22).nz = vN.Z
    Cube2(23).nx = vN.X: Cube2(23).ny = vN.Y: Cube2(23).nz = vN.Z

    'Top
    Cube2(24) = CreateVertex(-1, 1, 1, 0, 0, 0, 0, 1)
    Cube2(25) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    Cube2(26) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 0)
    vN = GenerateTriangleNormals(Cube2(24), Cube2(25), Cube2(26))
    Cube2(24).nx = vN.X: Cube2(24).ny = vN.Y: Cube2(24).nz = vN.Z
    Cube2(25).nx = vN.X: Cube2(25).ny = vN.Y: Cube2(25).nz = vN.Z
    Cube2(26).nx = vN.X: Cube2(26).ny = vN.Y: Cube2(26).nz = vN.Z

    Cube2(27) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 0)
    Cube2(28) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 0)
    Cube2(29) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
    vN = GenerateTriangleNormals(Cube2(27), Cube2(28), Cube2(29))
    Cube2(27).nx = vN.X: Cube2(27).ny = vN.Y: Cube2(27).nz = vN.Z
    Cube2(28).nx = vN.X: Cube2(28).ny = vN.Y: Cube2(28).nz = vN.Z
    Cube2(29).nx = vN.X: Cube2(29).ny = vN.Y: Cube2(29).nz = vN.Z

    'Top
    Cube2(30) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(31) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 1)
    Cube2(32) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 1)
    vN = GenerateTriangleNormals(Cube2(30), Cube2(31), Cube2(32))
    Cube2(30).nx = vN.X: Cube2(30).ny = vN.Y: Cube2(30).nz = vN.Z
    Cube2(31).nx = vN.X: Cube2(31).ny = vN.Y: Cube2(31).nz = vN.Z
    Cube2(32).nx = vN.X: Cube2(32).ny = vN.Y: Cube2(32).nz = vN.Z

    Cube2(33) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 1)
    Cube2(34) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
    Cube2(35) = CreateVertex(1, -1, -1, 0, 0, 0, 1, 0)
    vN = GenerateTriangleNormals(Cube2(33), Cube2(34), Cube2(35))
    Cube2(33).nx = vN.X: Cube2(33).ny = vN.Y: Cube2(33).nz = vN.Z
    Cube2(34).nx = vN.X: Cube2(34).ny = vN.Y: Cube2(34).nz = vN.Z
    Cube2(35).nx = vN.X: Cube2(35).ny = vN.Y: Cube2(35).nz = vN.Z


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  2. #22
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    سپس يک بافر vertex خالي با ساير موردنظر مي سازيم :


    Set VBuffer = D3DDevice.CreateVertexBuffer(Len(Cube2(0)) * 36, 0, Unlit_FVF, D3DPOOL_DEFAULT)x


    سپس اين بافر vertex ساخته شده را با داده هاي cube2 پر مي کنيم :


    D3DVertexBuffer8SetData VBuffer, 0, Len(Cube2(0)) * 36, 0, Cube2(0)x


    در دستورات فوق تابعي با نام GenerateTraingleNormals استفاده شده است . اين تابع دو بردار را از روي سه vertex داده شده با آن مي سازد و سپس ضرب برداري ايندو را حساب مي کند و سپس بردار حاصله را نرمال مي نمايد :


    Private Function GenerateTriangleNormals(p0 As UnlitVertex, p1 As UnlitVertex, p2 As UnlitVertex) As D3DVECTOR
    Dim v01 As D3DVECTOR 'Vector from points 0 to 1
    Dim v02 As D3DVECTOR 'Vector from points 0 to 2
    Dim vNorm As D3DVECTOR 'The final vector

    'Create the vectors from points 0 to 1 and 0 to 2
    D3DXVec3Subtract v01, MakeVector(p1.X, p1.Y, p1.Z), MakeVector(p0.X, p0.Y, p0.Z)
    D3DXVec3Subtract v02, MakeVector(p2.X, p2.Y, p2.Z), MakeVector(p0.X, p0.Y, p0.Z)

    'Get the cross product
    D3DXVec3Cross vNorm, v01, v02

    'Normalize this vector
    D3DXVec3Normalize vNorm, vNorm

    'Return the value
    GenerateTriangleNormals.X = vNorm.X
    GenerateTriangleNormals.Y = vNorm.Y
    GenerateTriangleNormals.Z = vNorm.Z
    End Function



    حال به توضيح تابع SetupLights مي پردازيم . در اين تابع دو شي D3DMATERIAL8 و D3DCOLORVALUE استفاده شده است :


    Private Function SetupLights() As Boolean
    Dim Mtrl As D3DMATERIAL8, Col As D3DCOLORVALUE
    Col.a = 1: Col.r = 1: Col.g = 1: Col.b = 1
    Mtrl.Ambient = Col
    Mtrl.diffuse = Col
    D3DDevice.SetMaterial Mtrl

    Lights.Type = D3DLIGHT_DIRECTIONAL
    Lights.diffuse.r = 1
    Lights.diffuse.g = 1
    Lights.diffuse.b = 1
    Lights.Direction = MakeVector(1, -1, 0)

    D3DDevice.SetLight 0, Lights

    SetupLights = True
    End Function



    تابع Render بصورت زير است :


    Public Sub Render()
    D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0 '//Clear the screen black
    D3DDevice.BeginScene
    'Draw the cube
    D3DDevice.SetTexture 0, CubeTexture
    D3DDevice.SetStreamSource 0, VBuffer, Len(Cube2(0))
    D3DDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 12
    D3DDevice.EndScene
    D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
    End Sub



    ساختار اصلي برنامه بصورت زير است :


    Call Initialise
    Do While bRunning
    RotateAngle = RotateAngle + 0.1
    If RotateAngle >= 360 Then RotateAngle = RotateAngle - 360

    D3DXMatrixIdentity matWorld

    D3DXMatrixIdentity matTemp
    D3DXMatrixRotationX matTemp, RotateAngle * (pi / 180)
    D3DXMatrixMultiply matWorld, matWorld, matTemp

    D3DXMatrixIdentity matTemp
    D3DXMatrixRotationY matTemp, RotateAngle * (pi / 180)
    D3DXMatrixMultiply matWorld, matWorld, matTemp

    D3DXMatrixIdentity matTemp
    D3DXMatrixRotationZ matTemp, RotateAngle * (pi / 180)
    D3DXMatrixMultiply matWorld, matWorld, matTemp


    D3DDevice.SetTransform D3DTS_WORLD, matWorld

    D3DDevice.LightEnable 0, 0 خاموش کردن light

    D3DDevice.LightEnable 0, 1 روشن کردن light

    Render
    DoEvents
    Loop


    در متد D3DDevice.LightEnable پارامتر اول شماره منبع نور و پارمتر دوم enable بودن آنرا نشان مي دهد


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  3. #23
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    موضوع :‌ترسيم متن دو بعدي در DirectX

    در اين درس روش ترسيم متن با دو نوع فونت را نشان خواهم داد :
    براي رسم يک متن با فونت تعريف شده در سيستم از شي D3DXFont استفاده مي کنيم :


    Dim MainFont as D3DXFont
    Dim MainFontDesc as IFont
    Dim TextRect as RECT
    Dim fnt as new stdFont


    در حاليکه براي ايجاد يک متن با فونت custom ابتدا يک texture تعريف مي کنيم :


    Dim fntTex as Direct3DTexture8


    همچنين براي ترسيم هر کاراکتر يک آرايه vertex اي را از نوع TLVERTEX تعريف مي نمائيم :


    Dim vertchar(3) as TLVERTEX


    حال به سراغ تابع Initialize مي رويم . در اين تابع ابتدا دستورات مربوط به ايجاد اشيا D3D و D3Dx را قرا دهيد سپس دستورات مربوط به اختصاص آداپتور و نيز ايجاد شي D3DDevice را انجام مي دهيم . حال دستورات تنظيم shader و rendering را مي آوريم :


    D3DDevice.SetVertexShader TL_FVF
    D3DDevice.SetRenderState D3DRS_LIGHTING, False


    سپس تنظيمات پارامترهاي transparency براي rendering را انجام مي دهيم :


    D3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
    D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
    D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True


    حال بايستي textureرا طوري ----- کنيم که در زمان stretch شدن يا squash شدن بهتر بنظر برسد :


    D3DDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
    D3DDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  4. #24
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    حال ----- Z را فعال مي کنيم :


    D3DDevice.SetRenderState D3DRS_ZENABLE, 1


    سپس ماتريسهاي world ، view و projection را تنظيم مي کنيم :


    D3DXMatrixIdentity matWorld
    D3DDevice.SetTransform D3DTS_WORLD, matWorld
    D3DXMatrixLookAtLH matView, MakeVector(0, 9, -9), MakeVector(0, 0, 0), MakeVector(0, 1, 0)
    D3DDevice.SetTransform D3DTS_VIEW, matView
    D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500
    D3DDevice.SetTransform D3DTS_PROJECTION, matProj


    حال به بخش تنظيم پارامترهاي فونت مي رسيم . در مورد فونت دو بعدي عادي :


    fnt.Name = "Verdana"x
    fnt.Size = 18
    fnt.Bold = True
    Set MainFontDesc = fnt
    Set MainFont = D3DX.CreateFont(D3DDevice, MainFontDesc.hFont)x


    و در مورد فونت custom :


    Set fntTex = D3DX.CreateTextureFromFileEx(D3DDevice, yourfilename, 256, 128, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_POINT, &HFF00FF00, ByVal 0, ByVal 0)x
    end function


    روتين Render بصورت زير خواهد بود :


    Public Sub Render()x
    D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0
    D3DDevice.BeginScene


    براي رندر متن با فونت عادي بصورت زير عمل مي کنيم :


    TextRect.Top = 440
    TextRect.Left = 1
    TextRect.bottom = 480
    TextRect.Right = 640
    D3DX.DrawText MainFont, &HFFCCCCFF, "Current Frame Rate: " & FPS_Current, TextRect, DT_TOP Or DT_CENTER


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  5. #25
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    براي رندر متن با فونت custom بصورت زير عمل مي کنيم :


    RenderStringFromCustomFont_2D "Hamed Sheidaian", 1, 1, 16, 16
    D3DDevice.EndScene
    D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
    End Sub


    همانطور که مشاهده مي کنيد از روتيني با نام RenderStringFromCustomFont_2D استفاده شده است :


    Private Sub RenderStringFromCustomFont_2D(strText As String, startX As Single, StartY As Single, Height As Integer, Width As Integer)x
    Dim I As Integer
    Dim CharX As Integer, CharY As Integer
    Dim Char As String
    Dim LinearEntry As Integer
    If Len(strText) = 0 Then Exit Sub
    For I = 1 To Len(strText)x


    1 - ابتدا بايستي مختصات texture را انتخاب کنيم . براي اينکار بايستي هر entry را در texture جدا کنيم :


    Char = Mid$(strText, I, 1)x
    If Asc(Char) >= 65 And Asc(Char) <= 90 Then
    LinearEntry = Asc(Char) - 65
    ElseIf Asc(Char) >= 97 And Asc(Char) <= 122 Then
    LinearEntry = Asc(Char) - 71
    ElseIf Asc(Char) >= 48 And Asc(Char) <= 57 Then
    LinearEntry = Asc(Char) + 4
    ElseIf Char = " " Then
    LinearEntry = 63
    ElseIf Char = "." Then
    LinearEntry = 62
    ElseIf Char = ";" Then
    LinearEntry = 66
    ElseIf Char = "/" Then
    LinearEntry = 64
    ElseIf Char = "," Then
    LinearEntry = 65
    End If


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  6. #26
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    بعد از مقداردهي LinearEntry بايستي مختصات grid کاراکتر را پردازش کنيم :


    If LinearEntry <= 15 Then
    CharY = 0
    CharX = LinearEntry
    End If
    If LinearEntry >= 16 And LinearEntry <= 31 Then
    CharY = 1
    CharX = LinearEntry - 16
    End If
    If LinearEntry >= 32 And LinearEntry <= 47 Then
    CharY = 2
    CharX = LinearEntry - 32
    End If
    If LinearEntry >= 48 And LinearEntry <= 63 Then
    CharY = 3
    CharX = LinearEntry - 48
    End If
    If LinearEntry >= 64 And LinearEntry <= 79 Then
    CharY = 4
    CharX = LinearEntry - 64
    End If


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  7. #27
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    ۲ - حال بايستي vertex هاي مورد نياز براي رسم کاراکتر را توليد کنيم :


    vertChar(0) = CreateTLVertex(startX + (Width * I), StartY, 0, 1, &HFFFFF
    (F,0,(1/16)*CharX,(1/8)*CharY
    vertChar(1) = CreateTLVertex(startX + (Width * I) + Width, StartY, 0, 1, &HFFFFF
    (F, 0,((1 / 16) * CharX) + (1 / 16), (1 / 8) * CharY
    vertChar(2) = CreateTLVertex(startX + (Width * I), StartY + Height, 0, 1, &HFFFFF
    ((F, 0, (1 / 16) * CharX, ((1 / 8) * CharY) + (1 / 8
    vertChar(3) = CreateTLVertex(startX + (Width * I) + Width, StartY + Height, 0, 1, HFFFFFF, 0, ((1 / 16) * CharX) + (1 / 16), ((1 / 8) * CharY) + (1 / 8))x


    ۳ - رندر vertex ها :


    D3DDevice.SetTexture 0, fntTex
    D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, vertChar(0), Len(vertChar(0))x
    Next I
    End Sub


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  8. #28
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    موضوع : ترسيم اشيا سه بعدي با استفاده از شي Mesh
    شي Mesh که جزو اشيا D3DX مي باشد امکان ترسيم اشيا سه بعدي پايه و همچنين ترسيم مش هاي custom دلخواه را به شما مي دهد . در اين درس از شي Mesh براي ترسيم يک کره ( sphere ) استفاده مي کنيم . ابتدا متغير sphere را بصورت زير تعريف کنيد :


    Dim sphere as D3DXMesh


    همچنين براي نورپردازي و اختصاص material به کره به متغيرهاي زير نياز داريم :


    Dim d3dLight As D3DLIGHT8
    Dim material As D3DMATERIAL8
    Dim Col As D3DCOLORVALUE


    در تابع Initial پس از ساخت اشيا D3D و D3DX و D3DDevice بايستي پارامترهاي رنگ ، نورپردازي و اختصاص ماده ( material ) به کره را بصورت زير تنظيم کنيد :


    Col.a = 1
    Col.b = 1
    Col.g = 1
    Col.r = 1
    d3dLight.Type = D3DLIGHT_DIRECTIONAL
    d3dLight.diffuse = Col
    d3dLight.Direction = vec(-1, -1, -1)x


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  9. #29
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    نورپردازي از نوع جهت دار با رنگ col و بردار جهت (1-,1-,1-) است .
    نکته :
    رنگ ambient رنگي است که هنگاميکه جسم در سايه باشد به خود مي گيرد . بعبارت ديگر اين رنگ را جسم وقتي که در معرض يک نور ambient باشد از خود منعکس مي کند .
    رنگ diffuse رنگي است که هنگاميکه جسم در معرض نور مستقيم قرار بگيرد از خود منعکس مي کند .


    material.Ambient = Col
    material.diffuse = Col
    d3dDevice.SetMaterial material
    d3dDevice.SetLight 0, d3dLight
    d3dDevice.LightEnable 0, 1


    سپس بايستي پارامترهاي rendering را تنظيم کنيد :


    d3dDevice.SetRenderState D3DRS_LIGHTING, 1
    d3dDevice.SetRenderState D3DRS_ZENABLE, 1
    d3dDevice.SetRenderState D3DRS_LIGHTING, 1
    d3dDevice.SetRenderState D3DRS_ZENABLE, 1
    d3dDevice.SetRenderState D3DRS_SHADEMODE, D3DSHADE_GOURAUD
    d3dDevice.SetRenderState D3DRS_AMBIENT, &H202020
    d3dDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
    d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR


    حال بايستي شي sphere را بسازيم :


    Set Sphere = d3dx.CreateSphere(d3dDevice, 2, 1000, 20, Nothing)x


    که ۲ شعاع کره و ۱۰۰۰ تعداد slice هايي است که کره با آن ساخته مي شود .
    سپس بردارهاي نقطه ديد و مکان دوربين و رنگ زمينه را تنظيم کنيد ( viewpoint و camerapoint از نوع D3DVECTOR هستند ) .


    ViewPoint = vec(0, 0, 0)
    CameraPoint = vec(4, 4, 4)
    BackColor = &H404040


    در روتين Render ابتدا ماتريسها و بردارهاي صحنه را تنظيم مي کنيم :


    D3DXMatrixIdentity matWorld
    d3dDevice.SetTransform D3DTS_WORLD, matWorld
    D3DXMatrixRotationY matView, Rotation
    D3DXMatrixLookAtLH matTemp, CameraPoint, ViewPoint, vec(0, 1, 0)
    D3DXMatrixMultiply matView, matView, matTemp
    d3dDevice.SetTransform D3DTS_VIEW, matView
    D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500
    d3dDevice.SetTransform D3DTS_PROJECTION, matProj


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

  10. #30
    مدير باز نشسته
    تاریخ عضویت
    Jan 1970
    محل سکونت
    Tabriz
    نوشته ها
    5,550
    تشکر تشکر کرده 
    7,087
    تشکر تشکر شده 
    8,503
    تشکر شده در
    2,353 پست
    قدرت امتیاز دهی
    1938
    Array

    پیش فرض

    در پايان نيز شروع به رندر صحنه مي کنيم :


    d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, BackColor, 1, 0
    d3dDevice.BeginScene
    Sphere.DrawSubset 0
    d3dDevice.EndScene
    d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0


    93365739541900062743
    profilephpid100002248043280

    22771097565880345367
    facebook

    23759482593804762228
    NewGame7191

صفحه 3 از 3 نخستنخست 123

برچسب ها برای این تاپیک

علاقه مندی ها (بوک مارک ها)

علاقه مندی ها (بوک مارک ها)

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

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

http://www.worldup.ir/