Шейдеры с нуля

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 24.09.2014 (Ср) 15:14

это класс для текста, работает с dx9
можно ли как его ускорить

используется текстура

Код: Выделить всё
Dim RenX As Integer, RenY As Integer
Dim Bznak As Boolean

Private Type ConVFormat
  Pos As D3DVECTOR
  RHW As Single
  tU As Single
  tV As Single
End Type

Private Const ConFVF = D3DFVF_XYZRHW Or D3DFVF_TEX1



Public Sub draw_Text(Tex_id As Integer, Text As String, PosX As Single, PosY As Single, RazX As Single, RazY As Single, Optional xtSize As Single = 0)
Dim str As String, kol As Integer, Rend As Boolean, znak As String
  Dev.SetVertexShader Nothing
  Dev.SetPixelShader Nothing
 
  Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
  Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE
  Dev.SetRenderState D3DRS_TEXTUREFACTOR, &HFFFFF

 
  Dev.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE
  Dev.SetRenderState D3DRS_ZENABLE, D3DZB_FALSE

  Dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1
  Dev.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
  Dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
  Dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TFACTOR
  'Dev.SetTextureStageState 0, D3DTSS_COLORARG2, D3DTA_TFACTOR
  Dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DISABLE
  Bznak = False
  Dev.SetFVF ConFVF

    SizeX = RazX
    SizeY = RazY
    xSize = xtSize
    RenX = PosX
    RenY = PosY
    str = Text
    kol = Len(str)
    If (kol > 0) Then Rend = True
 
    Do While Rend
    DoEvents
    znak = Left(str, 1)
    kol = Len(str)
    If (kol = 0) Then
        Rend = False
    Else:
        str = Right(str, kol - 1)
        Sel_Znak znak
        If Bznak = False Then
            Dev.SetTexture 0, Tekstura(Tex_id).Textures
        Else:
            Dev.SetTexture 0, Tekstura(Font_simv_1).Textures
        End If

        Draw_znak xSize
    End If
  Loop

End Sub

Public Function Draw_znak(Optional xtSize As Single = 0)
 
  Vert(0).Pos = Vec3(RenX, RenY, 0.5)
  Vert(1).Pos = Vec3(RenX + SizeX, RenY, 0.5)
  Vert(2).Pos = Vec3(RenX, RenY + SizeY, 0.5)
  Vert(3).Pos = Vec3(RenX + SizeX, RenY + SizeY, 0.5)
 
  Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(Vert(0)), Len(Vert(0))
RenX = RenX + (SizeX - xtSize)
End Function





Private Sub Class_Initialize()
    Vert(0).RHW = 1
    Vert(0).tU = 0
    Vert(0).tV = 0
   
    Vert(1).RHW = 1
    Vert(1).tU = 1
    Vert(1).tV = 0
   
    Vert(2).RHW = 1
    Vert(2).tU = 0
    Vert(2).tV = 1
   
    Vert(3).RHW = 1
    Vert(3).tU = 1
    Vert(3).tV = 1
End Sub

Private Sub Sel_Znak(znak As String)
    Bznak = False
   
    Select Case znak
'///////////////////////////////////////////////////
        Case "A"
            Vert(0).tU = 0:  Vert(0).tV = 0
            Vert(1).tU = 0.06: Vert(1).tV = 0
            Vert(2).tU = 0: Vert(2).tV = 0.125
            Vert(3).tU = 0.06: Vert(3).tV = 0.125
        Case "B"
            Vert(0).tU = 0.06: Vert(0).tV = 0
            Vert(1).tU = 0.12: Vert(1).tV = 0
            Vert(2).tU = 0.06: Vert(2).tV = 0.125
            Vert(3).tU = 0.12:  Vert(3).tV = 0.125
        Case "C"
            Vert(0).tU = 0.118: Vert(0).tV = 0
            Vert(1).tU = 0.18: Vert(1).tV = 0
            Vert(2).tU = 0.118: Vert(2).tV = 0.125
            Vert(3).tU = 0.18:  Vert(3).tV = 0.125
        Case "D"
            Vert(0).tU = 0.177: Vert(0).tV = 0
            Vert(1).tU = 0.237: Vert(1).tV = 0
            Vert(2).tU = 0.177: Vert(2).tV = 0.125
            Vert(3).tU = 0.237:  Vert(3).tV = 0.125
        Case "E"
            Vert(0).tU = 0.235: Vert(0).tV = 0
            Vert(1).tU = 0.295: Vert(1).tV = 0
            Vert(2).tU = 0.235: Vert(2).tV = 0.125
            Vert(3).tU = 0.295:  Vert(3).tV = 0.125
        Case "F"
            Vert(0).tU = 0.294: Vert(0).tV = 0
            Vert(1).tU = 0.354: Vert(1).tV = 0
            Vert(2).tU = 0.294: Vert(2).tV = 0.125
            Vert(3).tU = 0.354:  Vert(3).tV = 0.125
        Case "G"
            Vert(0).tU = 0.352: Vert(0).tV = 0
            Vert(1).tU = 0.412: Vert(1).tV = 0
            Vert(2).tU = 0.352: Vert(2).tV = 0.125
            Vert(3).tU = 0.412:  Vert(3).tV = 0.125
        Case "H"
            Vert(0).tU = 0.41: Vert(0).tV = 0
            Vert(1).tU = 0.471: Vert(1).tV = 0
            Vert(2).tU = 0.41: Vert(2).tV = 0.125
            Vert(3).tU = 0.471:  Vert(3).tV = 0.125
        Case "I"
            Vert(0).tU = 0.469: Vert(0).tV = 0
            Vert(1).tU = 0.53: Vert(1).tV = 0
            Vert(2).tU = 0.469: Vert(2).tV = 0.125
            Vert(3).tU = 0.53:  Vert(3).tV = 0.125
        Case "J"
            Vert(0).tU = 0.529: Vert(0).tV = 0
            Vert(1).tU = 0.589: Vert(1).tV = 0
            Vert(2).tU = 0.529: Vert(2).tV = 0.125
            Vert(3).tU = 0.589:  Vert(3).tV = 0.125
        Case "K"
            Vert(0).tU = 0.587: Vert(0).tV = 0
            Vert(1).tU = 0.647: Vert(1).tV = 0
            Vert(2).tU = 0.587: Vert(2).tV = 0.125
            Vert(3).tU = 0.647:  Vert(3).tV = 0.125
        Case "L"
            Vert(0).tU = 0.646: Vert(0).tV = 0
            Vert(1).tU = 0.706: Vert(1).tV = 0
            Vert(2).tU = 0.646: Vert(2).tV = 0.125
            Vert(3).tU = 0.706:  Vert(3).tV = 0.125
        Case "M"
            Vert(0).tU = 0.704: Vert(0).tV = 0
            Vert(1).tU = 0.764: Vert(1).tV = 0
            Vert(2).tU = 0.704: Vert(2).tV = 0.125
            Vert(3).tU = 0.764:  Vert(3).tV = 0.125
        Case "N"
            Vert(0).tU = 0.762: Vert(0).tV = 0
            Vert(1).tU = 0.822: Vert(1).tV = 0
            Vert(2).tU = 0.762: Vert(2).tV = 0.125
            Vert(3).tU = 0.822:  Vert(3).tV = 0.125
        Case "O"
            Vert(0).tU = 0.822: Vert(0).tV = 0
            Vert(1).tU = 0.882: Vert(1).tV = 0
            Vert(2).tU = 0.822: Vert(2).tV = 0.125
            Vert(3).tU = 0.882:  Vert(3).tV = 0.125
        Case "P"
            Vert(0).tU = 0.88: Vert(0).tV = 0
            Vert(1).tU = 0.94: Vert(1).tV = 0
            Vert(2).tU = 0.88: Vert(2).tV = 0.125
            Vert(3).tU = 0.94:  Vert(3).tV = 0.125
        Case "Q"
            Vert(0).tU = 0.94: Vert(0).tV = 0
            Vert(1).tU = 1: Vert(1).tV = 0
            Vert(2).tU = 0.94: Vert(2).tV = 0.125
            Vert(3).tU = 1:  Vert(3).tV = 0.125
        Case "R"
            Vert(0).tU = 0: Vert(0).tV = 0.125
            Vert(1).tU = 0.062: Vert(1).tV = 0.125
            Vert(2).tU = 0: Vert(2).tV = 0.242
            Vert(3).tU = 0.062:  Vert(3).tV = 0.242
        Case "S"
            Vert(0).tU = 0.06: Vert(0).tV = 0.125
            Vert(1).tU = 0.12: Vert(1).tV = 0.125
            Vert(2).tU = 0.06: Vert(2).tV = 0.242
            Vert(3).tU = 0.12:  Vert(3).tV = 0.242
        Case "T"
            Vert(0).tU = 0.118: Vert(0).tV = 0.125
            Vert(1).tU = 0.18: Vert(1).tV = 0.125
            Vert(2).tU = 0.118: Vert(2).tV = 0.242
            Vert(3).tU = 0.18:  Vert(3).tV = 0.242
        Case "U"
            Vert(0).tU = 0.177: Vert(0).tV = 0.125
            Vert(1).tU = 0.237: Vert(1).tV = 0.125
            Vert(2).tU = 0.177: Vert(2).tV = 0.242
            Vert(3).tU = 0.237:  Vert(3).tV = 0.242
        Case "X"
            Vert(0).tU = 0.236: Vert(0).tV = 0.125
            Vert(1).tU = 0.296: Vert(1).tV = 0.125
            Vert(2).tU = 0.236: Vert(2).tV = 0.242
            Vert(3).tU = 0.296:  Vert(3).tV = 0.242
        Case "Y"
            Vert(0).tU = 0.294: Vert(0).tV = 0.125
            Vert(1).tU = 0.354: Vert(1).tV = 0.125
            Vert(2).tU = 0.294: Vert(2).tV = 0.242
            Vert(3).tU = 0.354:  Vert(3).tV = 0.242
        Case "Z"
            Vert(0).tU = 0.352: Vert(0).tV = 0.125
            Vert(1).tU = 0.412: Vert(1).tV = 0.125
            Vert(2).tU = 0.352: Vert(2).tV = 0.242
            Vert(3).tU = 0.412:  Vert(3).tV = 0.242
        Case " "
            Vert(0).tU = 0.412: Vert(0).tV = 0.125
            Vert(1).tU = 0.472: Vert(1).tV = 0.125
            Vert(2).tU = 0.412: Vert(2).tV = 0.242
            Vert(3).tU = 0.472:  Vert(3).tV = 0.242
       
       
'///////////////////////////////////////////////////
       
        Case "a"
            Vert(0).tU = 0.001: Vert(0).tV = 0.242
            Vert(1).tU = 0.061: Vert(1).tV = 0.242
            Vert(2).tU = 0.001: Vert(2).tV = 0.365
            Vert(3).tU = 0.061: Vert(3).tV = 0.365
        Case "b"
            Vert(0).tU = 0.06: Vert(0).tV = 0.242
            Vert(1).tU = 0.12: Vert(1).tV = 0.242
            Vert(2).tU = 0.06: Vert(2).tV = 0.365
            Vert(3).tU = 0.12:  Vert(3).tV = 0.365
        Case "c"
            Vert(0).tU = 0.118: Vert(0).tV = 0.242
            Vert(1).tU = 0.18: Vert(1).tV = 0.242
            Vert(2).tU = 0.118: Vert(2).tV = 0.365
            Vert(3).tU = 0.18:  Vert(3).tV = 0.365
        Case "d"
            Vert(0).tU = 0.177: Vert(0).tV = 0.242
            Vert(1).tU = 0.237: Vert(1).tV = 0.242
            Vert(2).tU = 0.177: Vert(2).tV = 0.365
            Vert(3).tU = 0.237:  Vert(3).tV = 0.365
        Case "e"
            Vert(0).tU = 0.235: Vert(0).tV = 0.242
            Vert(1).tU = 0.295: Vert(1).tV = 0.242
            Vert(2).tU = 0.235: Vert(2).tV = 0.365
            Vert(3).tU = 0.295:  Vert(3).tV = 0.365
        Case "f"
            Vert(0).tU = 0.294: Vert(0).tV = 0.242
            Vert(1).tU = 0.354: Vert(1).tV = 0.242
            Vert(2).tU = 0.294: Vert(2).tV = 0.365
            Vert(3).tU = 0.354:  Vert(3).tV = 0.365
        Case "g"
            Vert(0).tU = 0.352: Vert(0).tV = 0.242
            Vert(1).tU = 0.412: Vert(1).tV = 0.242
            Vert(2).tU = 0.352: Vert(2).tV = 0.365
            Vert(3).tU = 0.412:  Vert(3).tV = 0.365
        Case "h"
            Vert(0).tU = 0.41: Vert(0).tV = 0.242
            Vert(1).tU = 0.471: Vert(1).tV = 0.242
            Vert(2).tU = 0.41: Vert(2).tV = 0.365
            Vert(3).tU = 0.471:  Vert(3).tV = 0.365
        Case "i"
            Vert(0).tU = 0.469: Vert(0).tV = 0.242
            Vert(1).tU = 0.53: Vert(1).tV = 0.242
            Vert(2).tU = 0.469: Vert(2).tV = 0.365
            Vert(3).tU = 0.53:  Vert(3).tV = 0.365
        Case "j"
            Vert(0).tU = 0.529: Vert(0).tV = 0.242
            Vert(1).tU = 0.589: Vert(1).tV = 0.242
            Vert(2).tU = 0.529: Vert(2).tV = 0.365
            Vert(3).tU = 0.589:  Vert(3).tV = 0.365
        Case "k"
            Vert(0).tU = 0.587: Vert(0).tV = 0.242
            Vert(1).tU = 0.647: Vert(1).tV = 0.242
            Vert(2).tU = 0.587: Vert(2).tV = 0.365
            Vert(3).tU = 0.647:  Vert(3).tV = 0.365
        Case "l"
            Vert(0).tU = 0.646: Vert(0).tV = 0.242
            Vert(1).tU = 0.706: Vert(1).tV = 0.242
            Vert(2).tU = 0.646: Vert(2).tV = 0.365
            Vert(3).tU = 0.706:  Vert(3).tV = 0.365
        Case "m"
            Vert(0).tU = 0.704: Vert(0).tV = 0.242
            Vert(1).tU = 0.764: Vert(1).tV = 0.242
            Vert(2).tU = 0.704: Vert(2).tV = 0.365
            Vert(3).tU = 0.764:  Vert(3).tV = 0.365
        Case "n"
            Vert(0).tU = 0.762: Vert(0).tV = 0.242
            Vert(1).tU = 0.822: Vert(1).tV = 0.242
            Vert(2).tU = 0.762: Vert(2).tV = 0.365
            Vert(3).tU = 0.822:  Vert(3).tV = 0.365
        Case "o"
            Vert(0).tU = 0.822: Vert(0).tV = 0.242
            Vert(1).tU = 0.882: Vert(1).tV = 0.242
            Vert(2).tU = 0.822: Vert(2).tV = 0.365
            Vert(3).tU = 0.882:  Vert(3).tV = 0.365
        Case "p"
            Vert(0).tU = 0.88: Vert(0).tV = 0.242
            Vert(1).tU = 0.94: Vert(1).tV = 0.242
            Vert(2).tU = 0.88: Vert(2).tV = 0.365
            Vert(3).tU = 0.94:  Vert(3).tV = 0.365
        Case "q"
            Vert(0).tU = 0.94: Vert(0).tV = 0.242
            Vert(1).tU = 1: Vert(1).tV = 0.242
            Vert(2).tU = 0.94: Vert(2).tV = 0.365
            Vert(3).tU = 1:  Vert(3).tV = 0.365
        Case "r"
            Vert(0).tU = 0: Vert(0).tV = 0.358
            Vert(1).tU = 0.062: Vert(1).tV = 0.358
            Vert(2).tU = 0: Vert(2).tV = 0.478
            Vert(3).tU = 0.062:  Vert(3).tV = 0.478
        Case "s"
            Vert(0).tU = 0.06: Vert(0).tV = 0.358
            Vert(1).tU = 0.12: Vert(1).tV = 0.358
            Vert(2).tU = 0.06: Vert(2).tV = 0.478
            Vert(3).tU = 0.12:  Vert(3).tV = 0.478
        Case "t"
            Vert(0).tU = 0.118: Vert(0).tV = 0.358
            Vert(1).tU = 0.178: Vert(1).tV = 0.358
            Vert(2).tU = 0.118: Vert(2).tV = 0.478
            Vert(3).tU = 0.178:  Vert(3).tV = 0.478
        Case "u"
            Vert(0).tU = 0.177: Vert(0).tV = 0.358
            Vert(1).tU = 0.237: Vert(1).tV = 0.358
            Vert(2).tU = 0.177: Vert(2).tV = 0.478
            Vert(3).tU = 0.237:  Vert(3).tV = 0.478
        Case "x"
            Vert(0).tU = 0.235: Vert(0).tV = 0.358
            Vert(1).tU = 0.295: Vert(1).tV = 0.358
            Vert(2).tU = 0.235: Vert(2).tV = 0.478
            Vert(3).tU = 0.295:  Vert(3).tV = 0.478
        Case "y"
            Vert(0).tU = 0.294: Vert(0).tV = 0.358
            Vert(1).tU = 0.354: Vert(1).tV = 0.358
            Vert(2).tU = 0.294: Vert(2).tV = 0.478
            Vert(3).tU = 0.354:  Vert(3).tV = 0.478
        Case "z"
            Vert(0).tU = 0.352: Vert(0).tV = 0.358
            Vert(1).tU = 0.412: Vert(1).tV = 0.358
            Vert(2).tU = 0.352: Vert(2).tV = 0.478
            Vert(3).tU = 0.412:  Vert(3).tV = 0.478
           
           
'///////////////////////////////////////////////////
           
         Case "À"
            Vert(0).tU = 0.001: Vert(0).tV = 0.475
            Vert(1).tU = 0.061: Vert(1).tV = 0.475
            Vert(2).tU = 0.001: Vert(2).tV = 0.595
            Vert(3).tU = 0.061: Vert(3).tV = 0.595
        Case "Á"
            Vert(0).tU = 0.06: Vert(0).tV = 0.475
            Vert(1).tU = 0.12: Vert(1).tV = 0.475
            Vert(2).tU = 0.06: Vert(2).tV = 0.595
            Vert(3).tU = 0.12:  Vert(3).tV = 0.595
        Case "Â"
            Vert(0).tU = 0.118: Vert(0).tV = 0.475
            Vert(1).tU = 0.18: Vert(1).tV = 0.475
            Vert(2).tU = 0.118: Vert(2).tV = 0.595
            Vert(3).tU = 0.18:  Vert(3).tV = 0.595
        Case "Ã"
            Vert(0).tU = 0.177: Vert(0).tV = 0.475
            Vert(1).tU = 0.237: Vert(1).tV = 0.475
            Vert(2).tU = 0.177: Vert(2).tV = 0.595
            Vert(3).tU = 0.237:  Vert(3).tV = 0.595
        Case "Ä"
            Vert(0).tU = 0.235: Vert(0).tV = 0.475
            Vert(1).tU = 0.295: Vert(1).tV = 0.475
            Vert(2).tU = 0.235: Vert(2).tV = 0.595
            Vert(3).tU = 0.295:  Vert(3).tV = 0.595
        Case "Å"
            Vert(0).tU = 0.294: Vert(0).tV = 0.475
            Vert(1).tU = 0.354: Vert(1).tV = 0.475
            Vert(2).tU = 0.294: Vert(2).tV = 0.595
            Vert(3).tU = 0.354:  Vert(3).tV = 0.595
        Case "¨"
            Vert(0).tU = 0.352: Vert(0).tV = 0.475
            Vert(1).tU = 0.412: Vert(1).tV = 0.475
            Vert(2).tU = 0.352: Vert(2).tV = 0.595
            Vert(3).tU = 0.412:  Vert(3).tV = 0.595
        Case "Æ"
            Vert(0).tU = 0.41: Vert(0).tV = 0.475
            Vert(1).tU = 0.471: Vert(1).tV = 0.475
            Vert(2).tU = 0.41: Vert(2).tV = 0.595
            Vert(3).tU = 0.471:  Vert(3).tV = 0.595
        Case "Ç"
            Vert(0).tU = 0.469: Vert(0).tV = 0.475
            Vert(1).tU = 0.53: Vert(1).tV = 0.475
            Vert(2).tU = 0.469: Vert(2).tV = 0.595
            Vert(3).tU = 0.53:  Vert(3).tV = 0.595
        Case "È"
            Vert(0).tU = 0.529: Vert(0).tV = 0.475
            Vert(1).tU = 0.589: Vert(1).tV = 0.475
            Vert(2).tU = 0.529: Vert(2).tV = 0.595
            Vert(3).tU = 0.589:  Vert(3).tV = 0.595
        Case "É"
            Vert(0).tU = 0.587: Vert(0).tV = 0.475
            Vert(1).tU = 0.647: Vert(1).tV = 0.475
            Vert(2).tU = 0.587: Vert(2).tV = 0.595
            Vert(3).tU = 0.647:  Vert(3).tV = 0.595
        Case "Ê"
            Vert(0).tU = 0.646: Vert(0).tV = 0.475
            Vert(1).tU = 0.706: Vert(1).tV = 0.475
            Vert(2).tU = 0.646: Vert(2).tV = 0.595
            Vert(3).tU = 0.706:  Vert(3).tV = 0.595
        Case "Ë"
            Vert(0).tU = 0.704: Vert(0).tV = 0.475
            Vert(1).tU = 0.764: Vert(1).tV = 0.475
            Vert(2).tU = 0.704: Vert(2).tV = 0.595
            Vert(3).tU = 0.764:  Vert(3).tV = 0.595
        Case "Ì"
            Vert(0).tU = 0.762: Vert(0).tV = 0.475
            Vert(1).tU = 0.822: Vert(1).tV = 0.475
            Vert(2).tU = 0.762: Vert(2).tV = 0.595
            Vert(3).tU = 0.822:  Vert(3).tV = 0.595
        Case "Í"
            Vert(0).tU = 0.822: Vert(0).tV = 0.475
            Vert(1).tU = 0.882: Vert(1).tV = 0.475
            Vert(2).tU = 0.822: Vert(2).tV = 0.595
            Vert(3).tU = 0.882:  Vert(3).tV = 0.595
        Case "Î"
            Vert(0).tU = 0.88: Vert(0).tV = 0.475
            Vert(1).tU = 0.94: Vert(1).tV = 0.475
            Vert(2).tU = 0.88: Vert(2).tV = 0.595
            Vert(3).tU = 0.94:  Vert(3).tV = 0.595
        Case "Ï"
            Vert(0).tU = 0.94: Vert(0).tV = 0.475
            Vert(1).tU = 1: Vert(1).tV = 0.475
            Vert(2).tU = 0.94: Vert(2).tV = 0.595
            Vert(3).tU = 1:  Vert(3).tV = 0.595
        Case "Ð"
            Vert(0).tU = 0: Vert(0).tV = 0.595
            Vert(1).tU = 0.062: Vert(1).tV = 0.595
            Vert(2).tU = 0: Vert(2).tV = 0.72
            Vert(3).tU = 0.062:  Vert(3).tV = 0.72
        Case "Ñ"
            Vert(0).tU = 0.06: Vert(0).tV = 0.595
            Vert(1).tU = 0.12: Vert(1).tV = 0.595
            Vert(2).tU = 0.06: Vert(2).tV = 0.72
            Vert(3).tU = 0.12:  Vert(3).tV = 0.72
        Case "Ò"
            Vert(0).tU = 0.118: Vert(0).tV = 0.595
            Vert(1).tU = 0.18: Vert(1).tV = 0.595
            Vert(2).tU = 0.118: Vert(2).tV = 0.72
            Vert(3).tU = 0.18:  Vert(3).tV = 0.72
        Case "Ó"
            Vert(0).tU = 0.177: Vert(0).tV = 0.595
            Vert(1).tU = 0.237: Vert(1).tV = 0.595
            Vert(2).tU = 0.177: Vert(2).tV = 0.72
            Vert(3).tU = 0.237:  Vert(3).tV = 0.72
        Case "Ô"
            Vert(0).tU = 0.236: Vert(0).tV = 0.595
            Vert(1).tU = 0.296: Vert(1).tV = 0.595
            Vert(2).tU = 0.236: Vert(2).tV = 0.72
            Vert(3).tU = 0.296:  Vert(3).tV = 0.72
        Case "Õ"
            Vert(0).tU = 0.294: Vert(0).tV = 0.595
            Vert(1).tU = 0.354: Vert(1).tV = 0.595
            Vert(2).tU = 0.294: Vert(2).tV = 0.72
            Vert(3).tU = 0.354:  Vert(3).tV = 0.72
        Case "Ö"
            Vert(0).tU = 0.352: Vert(0).tV = 0.595
            Vert(1).tU = 0.412: Vert(1).tV = 0.595
            Vert(2).tU = 0.352: Vert(2).tV = 0.72
            Vert(3).tU = 0.412:  Vert(3).tV = 0.72
           
         Case "×"
            Vert(0).tU = 0.412: Vert(0).tV = 0.595
            Vert(1).tU = 0.472: Vert(1).tV = 0.595
            Vert(2).tU = 0.412: Vert(2).tV = 0.72
            Vert(3).tU = 0.472:  Vert(3).tV = 0.72
        Case "Ø"
            Vert(0).tU = 0.47: Vert(0).tV = 0.595
            Vert(1).tU = 0.53: Vert(1).tV = 0.595
            Vert(2).tU = 0.47: Vert(2).tV = 0.72
            Vert(3).tU = 0.53:  Vert(3).tV = 0.72
        Case "Ù"
            Vert(0).tU = 0.528: Vert(0).tV = 0.595
            Vert(1).tU = 0.588: Vert(1).tV = 0.595
            Vert(2).tU = 0.528: Vert(2).tV = 0.72
            Vert(3).tU = 0.588:  Vert(3).tV = 0.72
        Case "Ú"
            Vert(0).tU = 0.587: Vert(0).tV = 0.595
            Vert(1).tU = 0.647: Vert(1).tV = 0.595
            Vert(2).tU = 0.587: Vert(2).tV = 0.72
            Vert(3).tU = 0.647:  Vert(3).tV = 0.72
        Case "Û"
            Vert(0).tU = 0.645: Vert(0).tV = 0.595
            Vert(1).tU = 0.705: Vert(1).tV = 0.595
            Vert(2).tU = 0.645: Vert(2).tV = 0.72
            Vert(3).tU = 0.705:  Vert(3).tV = 0.72
        Case "Ü"
            Vert(0).tU = 0.704: Vert(0).tV = 0.595
            Vert(1).tU = 0.764: Vert(1).tV = 0.595
            Vert(2).tU = 0.704: Vert(2).tV = 0.72
            Vert(3).tU = 0.764:  Vert(3).tV = 0.72
        Case "Ý"
            Vert(0).tU = 0.762: Vert(0).tV = 0.595
            Vert(1).tU = 0.822: Vert(1).tV = 0.595
            Vert(2).tU = 0.762: Vert(2).tV = 0.72
            Vert(3).tU = 0.822:  Vert(3).tV = 0.72
        Case "Þ"
            Vert(0).tU = 0.822: Vert(0).tV = 0.595
            Vert(1).tU = 0.882: Vert(1).tV = 0.595
            Vert(2).tU = 0.822: Vert(2).tV = 0.72
            Vert(3).tU = 0.882:  Vert(3).tV = 0.72
        Case "ß"
            Vert(0).tU = 0.88: Vert(0).tV = 0.595
            Vert(1).tU = 0.94: Vert(1).tV = 0.595
            Vert(2).tU = 0.88: Vert(2).tV = 0.72
            Vert(3).tU = 0.94:  Vert(3).tV = 0.72
         
'///////////////////////////////////////////////////
         Case "à"
            Vert(0).tU = 0.001: Vert(0).tV = 0.71
            Vert(1).tU = 0.061: Vert(1).tV = 0.71
            Vert(2).tU = 0.001: Vert(2).tV = 0.835
            Vert(3).tU = 0.061: Vert(3).tV = 0.835
        Case "á"
            Vert(0).tU = 0.06: Vert(0).tV = 0.71
            Vert(1).tU = 0.12: Vert(1).tV = 0.71
            Vert(2).tU = 0.06: Vert(2).tV = 0.835
            Vert(3).tU = 0.12:  Vert(3).tV = 0.835
        Case "â"
            Vert(0).tU = 0.118: Vert(0).tV = 0.71
            Vert(1).tU = 0.18: Vert(1).tV = 0.71
            Vert(2).tU = 0.118: Vert(2).tV = 0.835
            Vert(3).tU = 0.18:  Vert(3).tV = 0.835
        Case "ã"
            Vert(0).tU = 0.177: Vert(0).tV = 0.71
            Vert(1).tU = 0.237: Vert(1).tV = 0.71
            Vert(2).tU = 0.177: Vert(2).tV = 0.835
            Vert(3).tU = 0.237:  Vert(3).tV = 0.835
        Case "ä"
            Vert(0).tU = 0.235: Vert(0).tV = 0.71
            Vert(1).tU = 0.295: Vert(1).tV = 0.71
            Vert(2).tU = 0.235: Vert(2).tV = 0.835
            Vert(3).tU = 0.295:  Vert(3).tV = 0.835
        Case "å"
            Vert(0).tU = 0.294: Vert(0).tV = 0.71
            Vert(1).tU = 0.354: Vert(1).tV = 0.71
            Vert(2).tU = 0.294: Vert(2).tV = 0.835
            Vert(3).tU = 0.354:  Vert(3).tV = 0.835
        Case "¸"
            Vert(0).tU = 0.352: Vert(0).tV = 0.71
            Vert(1).tU = 0.412: Vert(1).tV = 0.71
            Vert(2).tU = 0.352: Vert(2).tV = 0.835
            Vert(3).tU = 0.412:  Vert(3).tV = 0.835
        Case "æ"
            Vert(0).tU = 0.41: Vert(0).tV = 0.71
            Vert(1).tU = 0.471: Vert(1).tV = 0.71
            Vert(2).tU = 0.41: Vert(2).tV = 0.835
            Vert(3).tU = 0.471:  Vert(3).tV = 0.835
        Case "ç"
            Vert(0).tU = 0.469: Vert(0).tV = 0.71
            Vert(1).tU = 0.53: Vert(1).tV = 0.71
            Vert(2).tU = 0.469: Vert(2).tV = 0.835
            Vert(3).tU = 0.53:  Vert(3).tV = 0.835
        Case "è"
            Vert(0).tU = 0.529: Vert(0).tV = 0.71
            Vert(1).tU = 0.589: Vert(1).tV = 0.71
            Vert(2).tU = 0.529: Vert(2).tV = 0.835
            Vert(3).tU = 0.589:  Vert(3).tV = 0.835
        Case "é"
            Vert(0).tU = 0.587: Vert(0).tV = 0.71
            Vert(1).tU = 0.647: Vert(1).tV = 0.71
            Vert(2).tU = 0.587: Vert(2).tV = 0.835
            Vert(3).tU = 0.647:  Vert(3).tV = 0.835
        Case "ê"
            Vert(0).tU = 0.646: Vert(0).tV = 0.71
            Vert(1).tU = 0.706: Vert(1).tV = 0.71
            Vert(2).tU = 0.646: Vert(2).tV = 0.835
            Vert(3).tU = 0.706:  Vert(3).tV = 0.835
        Case "ë"
            Vert(0).tU = 0.704: Vert(0).tV = 0.71
            Vert(1).tU = 0.764: Vert(1).tV = 0.71
            Vert(2).tU = 0.704: Vert(2).tV = 0.835
            Vert(3).tU = 0.764:  Vert(3).tV = 0.835
        Case "ì"
            Vert(0).tU = 0.762: Vert(0).tV = 0.71
            Vert(1).tU = 0.822: Vert(1).tV = 0.71
            Vert(2).tU = 0.762: Vert(2).tV = 0.835
            Vert(3).tU = 0.822:  Vert(3).tV = 0.835
        Case "í"
            Vert(0).tU = 0.822: Vert(0).tV = 0.71
            Vert(1).tU = 0.882: Vert(1).tV = 0.71
            Vert(2).tU = 0.822: Vert(2).tV = 0.835
            Vert(3).tU = 0.882:  Vert(3).tV = 0.835
        Case "î"
            Vert(0).tU = 0.88: Vert(0).tV = 0.71
            Vert(1).tU = 0.94: Vert(1).tV = 0.71
            Vert(2).tU = 0.88: Vert(2).tV = 0.835
            Vert(3).tU = 0.94:  Vert(3).tV = 0.835
        Case "ï"
            Vert(0).tU = 0.94: Vert(0).tV = 0.71
            Vert(1).tU = 1: Vert(1).tV = 0.71
            Vert(2).tU = 0.94: Vert(2).tV = 0.835
            Vert(3).tU = 1:  Vert(3).tV = 0.835
        Case "ð"
            Vert(0).tU = 0: Vert(0).tV = 0.83
            Vert(1).tU = 0.062: Vert(1).tV = 0.83
            Vert(2).tU = 0: Vert(2).tV = 0.95
            Vert(3).tU = 0.062:  Vert(3).tV = 0.95
        Case "ñ"
            Vert(0).tU = 0.06: Vert(0).tV = 0.83
            Vert(1).tU = 0.12: Vert(1).tV = 0.83
            Vert(2).tU = 0.06: Vert(2).tV = 0.95
            Vert(3).tU = 0.12:  Vert(3).tV = 0.95
        Case "ò"
            Vert(0).tU = 0.118: Vert(0).tV = 0.83
            Vert(1).tU = 0.18: Vert(1).tV = 0.83
            Vert(2).tU = 0.118: Vert(2).tV = 0.95
            Vert(3).tU = 0.18:  Vert(3).tV = 0.95
        Case "ó"
            Vert(0).tU = 0.177: Vert(0).tV = 0.83
            Vert(1).tU = 0.237: Vert(1).tV = 0.83
            Vert(2).tU = 0.177: Vert(2).tV = 0.95
            Vert(3).tU = 0.237:  Vert(3).tV = 0.95
        Case "ô"
            Vert(0).tU = 0.236: Vert(0).tV = 0.83
            Vert(1).tU = 0.296: Vert(1).tV = 0.83
            Vert(2).tU = 0.236: Vert(2).tV = 0.95
            Vert(3).tU = 0.296:  Vert(3).tV = 0.95
        Case "õ"
            Vert(0).tU = 0.294: Vert(0).tV = 0.83
            Vert(1).tU = 0.354: Vert(1).tV = 0.83
            Vert(2).tU = 0.294: Vert(2).tV = 0.95
            Vert(3).tU = 0.354:  Vert(3).tV = 0.95
        Case "ö"
            Vert(0).tU = 0.352: Vert(0).tV = 0.83
            Vert(1).tU = 0.412: Vert(1).tV = 0.83
            Vert(2).tU = 0.352: Vert(2).tV = 0.95
            Vert(3).tU = 0.412:  Vert(3).tV = 0.95
           
         Case "÷"
            Vert(0).tU = 0.412: Vert(0).tV = 0.83
            Vert(1).tU = 0.472: Vert(1).tV = 0.83
            Vert(2).tU = 0.412: Vert(2).tV = 0.95
            Vert(3).tU = 0.472:  Vert(3).tV = 0.95
        Case "ø"
            Vert(0).tU = 0.47: Vert(0).tV = 0.83
            Vert(1).tU = 0.53: Vert(1).tV = 0.83
            Vert(2).tU = 0.47: Vert(2).tV = 0.95
            Vert(3).tU = 0.53:  Vert(3).tV = 0.95
        Case "ù"
            Vert(0).tU = 0.528: Vert(0).tV = 0.83
            Vert(1).tU = 0.588: Vert(1).tV = 0.83
            Vert(2).tU = 0.528: Vert(2).tV = 0.95
            Vert(3).tU = 0.588:  Vert(3).tV = 0.95
        Case "ú"
            Vert(0).tU = 0.587: Vert(0).tV = 0.83
            Vert(1).tU = 0.647: Vert(1).tV = 0.83
            Vert(2).tU = 0.587: Vert(2).tV = 0.95
            Vert(3).tU = 0.647:  Vert(3).tV = 0.95
        Case "û"
            Vert(0).tU = 0.645: Vert(0).tV = 0.83
            Vert(1).tU = 0.705: Vert(1).tV = 0.83
            Vert(2).tU = 0.645: Vert(2).tV = 0.95
            Vert(3).tU = 0.705:  Vert(3).tV = 0.95
        Case "ü"
            Vert(0).tU = 0.704: Vert(0).tV = 0.83
            Vert(1).tU = 0.764: Vert(1).tV = 0.83
            Vert(2).tU = 0.704: Vert(2).tV = 0.95
            Vert(3).tU = 0.764:  Vert(3).tV = 0.95
        Case "ý"
            Vert(0).tU = 0.762: Vert(0).tV = 0.83
            Vert(1).tU = 0.822: Vert(1).tV = 0.83
            Vert(2).tU = 0.762: Vert(2).tV = 0.95
            Vert(3).tU = 0.822:  Vert(3).tV = 0.95
        Case "þ"
            Vert(0).tU = 0.822: Vert(0).tV = 0.83
            Vert(1).tU = 0.882: Vert(1).tV = 0.83
            Vert(2).tU = 0.822: Vert(2).tV = 0.95
            Vert(3).tU = 0.882:  Vert(3).tV = 0.95
        Case "ÿ"
            Vert(0).tU = 0.88: Vert(0).tV = 0.83
            Vert(1).tU = 0.94: Vert(1).tV = 0.83
            Vert(2).tU = 0.88: Vert(2).tV = 0.95
            Vert(3).tU = 0.94:  Vert(3).tV = 0.95
       
       
       
        Case "0"
            Bznak = True
            Vert(0).tU = 0:  Vert(0).tV = 0
            Vert(1).tU = 0.06: Vert(1).tV = 0
            Vert(2).tU = 0: Vert(2).tV = 0.125
            Vert(3).tU = 0.06: Vert(3).tV = 0.125
        Case "1"
            Bznak = True
            Vert(0).tU = 0.06: Vert(0).tV = 0
            Vert(1).tU = 0.12: Vert(1).tV = 0
            Vert(2).tU = 0.06: Vert(2).tV = 0.125
            Vert(3).tU = 0.12:  Vert(3).tV = 0.125
        Case "2"
            Bznak = True
            Vert(0).tU = 0.118: Vert(0).tV = 0
            Vert(1).tU = 0.18: Vert(1).tV = 0
            Vert(2).tU = 0.118: Vert(2).tV = 0.125
            Vert(3).tU = 0.18:  Vert(3).tV = 0.125
        Case "3"
            Bznak = True
            Vert(0).tU = 0.177: Vert(0).tV = 0
            Vert(1).tU = 0.237: Vert(1).tV = 0
            Vert(2).tU = 0.177: Vert(2).tV = 0.125
            Vert(3).tU = 0.237:  Vert(3).tV = 0.125
        Case "4"
            Bznak = True
            Vert(0).tU = 0.235: Vert(0).tV = 0
            Vert(1).tU = 0.295: Vert(1).tV = 0
            Vert(2).tU = 0.235: Vert(2).tV = 0.125
            Vert(3).tU = 0.295:  Vert(3).tV = 0.125
        Case "5"
            Bznak = True
            Vert(0).tU = 0.294: Vert(0).tV = 0
            Vert(1).tU = 0.354: Vert(1).tV = 0
            Vert(2).tU = 0.294: Vert(2).tV = 0.125
            Vert(3).tU = 0.354:  Vert(3).tV = 0.125
        Case "6"
            Bznak = True
            Vert(0).tU = 0.352: Vert(0).tV = 0
            Vert(1).tU = 0.412: Vert(1).tV = 0
            Vert(2).tU = 0.352: Vert(2).tV = 0.125
            Vert(3).tU = 0.412:  Vert(3).tV = 0.125
        Case "7"
            Bznak = True
            Vert(0).tU = 0.41: Vert(0).tV = 0
            Vert(1).tU = 0.471: Vert(1).tV = 0
            Vert(2).tU = 0.41: Vert(2).tV = 0.125
            Vert(3).tU = 0.471:  Vert(3).tV = 0.125
        Case "8"
            Bznak = True
            Vert(0).tU = 0.469: Vert(0).tV = 0
            Vert(1).tU = 0.53: Vert(1).tV = 0
            Vert(2).tU = 0.469: Vert(2).tV = 0.125
            Vert(3).tU = 0.53:  Vert(3).tV = 0.125
        Case "9"
            Bznak = True
            Vert(0).tU = 0.529: Vert(0).tV = 0
            Vert(1).tU = 0.589: Vert(1).tV = 0
            Vert(2).tU = 0.529: Vert(2).tV = 0.125
            Vert(3).tU = 0.589:  Vert(3).tV = 0.125
           
           
           
        'Case "`1"
        '    Vert(0).tu = 0.587: Vert(0).tv = 0
        '    Vert(1).tu = 0.647: Vert(1).tv = 0
        '    Vert(2).tu = 0.587: Vert(2).tv = 0.125
        '    Vert(3).tu = 0.647:  Vert(3).tv = 0.125
        'Case "`2"
        '    Vert(0).tu = 0.646: Vert(0).tv = 0
        '    Vert(1).tu = 0.706: Vert(1).tv = 0
        '   Vert(2).tu = 0.646: Vert(2).tv = 0.125
       '     Vert(3).tu = 0.706:  Vert(3).tv = 0.125
       ' Case "`3"
       '     Vert(0).tu = 0.704: Vert(0).tv = 0
       '     Vert(1).tu = 0.764: Vert(1).tv = 0
       '     Vert(2).tu = 0.704: Vert(2).tv = 0.125
       '     Vert(3).tu = 0.764:  Vert(3).tv = 0.125
       ' Case "`4"
       '     Vert(0).tu = 0.762: Vert(0).tv = 0
       '     Vert(1).tu = 0.822: Vert(1).tv = 0
       '     Vert(2).tu = 0.762: Vert(2).tv = 0.125
       '     Vert(3).tu = 0.822:  Vert(3).tv = 0.125
       ' Case "`5"
       '     Vert(0).tu = 0.822: Vert(0).tv = 0
       '     Vert(1).tu = 0.882: Vert(1).tv = 0
       '     Vert(2).tu = 0.822: Vert(2).tv = 0.125
       '     Vert(3).tu = 0.882:  Vert(3).tv = 0.125
       ' Case "`6"
       '     Vert(0).tu = 0.88: Vert(0).tv = 0
       '     Vert(1).tu = 0.94: Vert(1).tv = 0
       '     Vert(2).tu = 0.88: Vert(2).tv = 0.125
       '     Vert(3).tu = 0.94:  Vert(3).tv = 0.125
       ' Case "`7"
       '     Vert(0).tu = 0.94: Vert(0).tv = 0
       '     Vert(1).tu = 1: Vert(1).tv = 0
       '     Vert(2).tu = 0.94: Vert(2).tv = 0.125
       '     Vert(3).tu = 1:  Vert(3).tv = 0.125
       '
     '///////
        Case "~"
            Bznak = True
            Vert(0).tU = 0: Vert(0).tV = 0.125
            Vert(1).tU = 0.062: Vert(1).tV = 0.125
            Vert(2).tU = 0: Vert(2).tV = 0.242
            Vert(3).tU = 0.062:  Vert(3).tV = 0.242
        Case "!"
            Bznak = True
            Vert(0).tU = 0.06: Vert(0).tV = 0.125
            Vert(1).tU = 0.12: Vert(1).tV = 0.125
            Vert(2).tU = 0.06: Vert(2).tV = 0.242
            Vert(3).tU = 0.12:  Vert(3).tV = 0.242
        Case "@"
            Bznak = True
            Vert(0).tU = 0.118: Vert(0).tV = 0.125
            Vert(1).tU = 0.18: Vert(1).tV = 0.125
            Vert(2).tU = 0.118: Vert(2).tV = 0.242
            Vert(3).tU = 0.18:  Vert(3).tV = 0.242
        Case "#"
            Bznak = True
            Vert(0).tU = 0.177: Vert(0).tV = 0.125
            Vert(1).tU = 0.237: Vert(1).tV = 0.125
            Vert(2).tU = 0.177: Vert(2).tV = 0.242
            Vert(3).tU = 0.237:  Vert(3).tV = 0.242
        Case "$"
            Bznak = True
            Vert(0).tU = 0.236: Vert(0).tV = 0.125
            Vert(1).tU = 0.296: Vert(1).tV = 0.125
            Vert(2).tU = 0.236: Vert(2).tV = 0.242
            Vert(3).tU = 0.296:  Vert(3).tV = 0.242
        Case "%"
            Bznak = True
            Vert(0).tU = 0.294: Vert(0).tV = 0.125
            Vert(1).tU = 0.354: Vert(1).tV = 0.125
            Vert(2).tU = 0.294: Vert(2).tV = 0.242
            Vert(3).tU = 0.354:  Vert(3).tV = 0.242
        Case "^"
            Bznak = True
            Vert(0).tU = 0.352: Vert(0).tV = 0.125
            Vert(1).tU = 0.412: Vert(1).tV = 0.125
            Vert(2).tU = 0.352: Vert(2).tV = 0.242
            Vert(3).tU = 0.412:  Vert(3).tV = 0.242
        Case "&"
            Bznak = True
            Vert(0).tU = 0.412: Vert(0).tV = 0.125
            Vert(1).tU = 0.472: Vert(1).tV = 0.125
            Vert(2).tU = 0.412: Vert(2).tV = 0.242
            Vert(3).tU = 0.472:  Vert(3).tV = 0.242
        Case "*"
            Bznak = True
            Vert(0).tU = 0.469: Vert(0).tV = 0.125
            Vert(1).tU = 0.53: Vert(1).tV = 0.125
            Vert(2).tU = 0.469: Vert(2).tV = 0.242
            Vert(3).tU = 0.53:  Vert(3).tV = 0.242
        Case "("
            Bznak = True
            Vert(0).tU = 0.529: Vert(0).tV = 0.125
            Vert(1).tU = 0.589: Vert(1).tV = 0.125
            Vert(2).tU = 0.529: Vert(2).tV = 0.242
            Vert(3).tU = 0.589:  Vert(3).tV = 0.242
        Case ")"
            Bznak = True
            Vert(0).tU = 0.587: Vert(0).tV = 0.125
            Vert(1).tU = 0.647: Vert(1).tV = 0.125
            Vert(2).tU = 0.587: Vert(2).tV = 0.242
            Vert(3).tU = 0.647:  Vert(3).tV = 0.242
        Case "_"
            Bznak = True
            Vert(0).tU = 0.646: Vert(0).tV = 0.125
            Vert(1).tU = 0.706: Vert(1).tV = 0.125
            Vert(2).tU = 0.646: Vert(2).tV = 0.242
            Vert(3).tU = 0.706:  Vert(3).tV = 0.242
        Case "+"
            Bznak = True
            Vert(0).tU = 0.704: Vert(0).tV = 0.125
            Vert(1).tU = 0.764: Vert(1).tV = 0.125
            Vert(2).tU = 0.704: Vert(2).tV = 0.242
            Vert(3).tU = 0.764:  Vert(3).tV = 0.242
        Case "/"
            Bznak = True
            Vert(0).tU = 0.762: Vert(0).tV = 0.125
            Vert(1).tU = 0.822: Vert(1).tV = 0.125
            Vert(2).tU = 0.762: Vert(2).tV = 0.242
            Vert(3).tU = 0.822:  Vert(3).tV = 0.242
        Case "-"
            Bznak = True
            Vert(0).tU = 0.822: Vert(0).tV = 0.125
            Vert(1).tU = 0.882: Vert(1).tV = 0.125
            Vert(2).tU = 0.822: Vert(2).tV = 0.242
            Vert(3).tU = 0.882:  Vert(3).tV = 0.242
        Case "="
            Bznak = True
            Vert(0).tU = 0.88: Vert(0).tV = 0.125
            Vert(1).tU = 0.94: Vert(1).tV = 0.125
            Vert(2).tU = 0.88: Vert(2).tV = 0.242
            Vert(3).tU = 0.94:  Vert(3).tV = 0.242
        Case "`"
            Bznak = True
            Vert(0).tU = 0.94: Vert(0).tV = 0.125
            Vert(1).tU = 1: Vert(1).tV = 0.125
            Vert(2).tU = 0.94: Vert(2).tV = 0.242
            Vert(3).tU = 1:  Vert(3).tV = 0.242
     '///////
        Case "¹"
            Bznak = True
            Vert(0).tU = 0: Vert(0).tV = 0.242
            Vert(1).tU = 0.062: Vert(1).tV = 0.242
            Vert(2).tU = 0: Vert(2).tV = 0.365
            Vert(3).tU = 0.062:  Vert(3).tV = 0.365
        Case "?"
            Bznak = True
            Vert(0).tU = 0.06: Vert(0).tV = 0.242
            Vert(1).tU = 0.12: Vert(1).tV = 0.242
            Vert(2).tU = 0.06: Vert(2).tV = 0.365
            Vert(3).tU = 0.12:  Vert(3).tV = 0.365
        Case "["
            Bznak = True
            Vert(0).tU = 0.118: Vert(0).tV = 0.242
            Vert(1).tU = 0.18: Vert(1).tV = 0.242
            Vert(2).tU = 0.118: Vert(2).tV = 0.365
            Vert(3).tU = 0.18:  Vert(3).tV = 0.365
        Case "]"
            Bznak = True
            Vert(0).tU = 0.177: Vert(0).tV = 0.242
            Vert(1).tU = 0.237: Vert(1).tV = 0.242
            Vert(2).tU = 0.177: Vert(2).tV = 0.365
            Vert(3).tU = 0.237:  Vert(3).tV = 0.365
        Case "{"
            Bznak = True
            Vert(0).tU = 0.236: Vert(0).tV = 0.242
            Vert(1).tU = 0.296: Vert(1).tV = 0.242
            Vert(2).tU = 0.236: Vert(2).tV = 0.365
            Vert(3).tU = 0.296:  Vert(3).tV = 0.365
        Case "}"
            Bznak = True
            Vert(0).tU = 0.294: Vert(0).tV = 0.242
            Vert(1).tU = 0.354: Vert(1).tV = 0.242
            Vert(2).tU = 0.294: Vert(2).tV = 0.365
            Vert(3).tU = 0.354:  Vert(3).tV = 0.365
        Case ";"
            Bznak = True
            Vert(0).tU = 0.352: Vert(0).tV = 0.242
            Vert(1).tU = 0.412: Vert(1).tV = 0.242
            Vert(2).tU = 0.352: Vert(2).tV = 0.365
            Vert(3).tU = 0.412:  Vert(3).tV = 0.365
        Case ":"
            Bznak = True
            Vert(0).tU = 0.412: Vert(0).tV = 0.242
            Vert(1).tU = 0.472: Vert(1).tV = 0.242
            Vert(2).tU = 0.412: Vert(2).tV = 0.365
            Vert(3).tU = 0.472:  Vert(3).tV = 0.365
        Case """"
            Bznak = True
            Vert(0).tU = 0.469: Vert(0).tV = 0.242
            Vert(1).tU = 0.53: Vert(1).tV = 0.242
            Vert(2).tU = 0.469: Vert(2).tV = 0.365
            Vert(3).tU = 0.53:  Vert(3).tV = 0.365
        Case "`"""
            Bznak = True
            Vert(0).tU = 0.529: Vert(0).tV = 0.242
            Vert(1).tU = 0.589: Vert(1).tV = 0.242
            Vert(2).tU = 0.529: Vert(2).tV = 0.365
            Vert(3).tU = 0.589:  Vert(3).tV = 0.365
        Case "`"
            Bznak = True
            Vert(0).tU = 0.587: Vert(0).tV = 0.242
            Vert(1).tU = 0.647: Vert(1).tV = 0.242
            Vert(2).tU = 0.587: Vert(2).tV = 0.365
            Vert(3).tU = 0.647:  Vert(3).tV = 0.365
        Case ","
            Bznak = True
            Vert(0).tU = 0.646: Vert(0).tV = 0.242
            Vert(1).tU = 0.706: Vert(1).tV = 0.242
            Vert(2).tU = 0.646: Vert(2).tV = 0.365
            Vert(3).tU = 0.706:  Vert(3).tV = 0.365
        Case "."
            Bznak = True
            Vert(0).tU = 0.704: Vert(0).tV = 0.242
            Vert(1).tU = 0.764: Vert(1).tV = 0.242
            Vert(2).tU = 0.704: Vert(2).tV = 0.365
            Vert(3).tU = 0.764:  Vert(3).tV = 0.365
        Case "\"
            Bznak = True
            Vert(0).tU = 0.762: Vert(0).tV = 0.242
            Vert(1).tU = 0.822: Vert(1).tV = 0.242
            Vert(2).tU = 0.762: Vert(2).tV = 0.365
            Vert(3).tU = 0.822:  Vert(3).tV = 0.365
        Case "<"
            Bznak = True
            Vert(0).tU = 0.822: Vert(0).tV = 0.242
            Vert(1).tU = 0.882: Vert(1).tV = 0.242
            Vert(2).tU = 0.822: Vert(2).tV = 0.365
            Vert(3).tU = 0.882:  Vert(3).tV = 0.365
        Case ">"
            Bznak = True
            Vert(0).tU = 0.88: Vert(0).tV = 0.242
            Vert(1).tU = 0.94: Vert(1).tV = 0.242
            Vert(2).tU = 0.88: Vert(2).tV = 0.365
            Vert(3).tU = 0.94:  Vert(3).tV = 0.365
        Case ""
            Bznak = True
            Vert(0).tU = 0.94: Vert(0).tV = 0.242
            Vert(1).tU = 1: Vert(1).tV = 0.242
            Vert(2).tU = 0.94: Vert(2).tV = 0.365
            Vert(3).tU = 1:  Vert(3).tV = 0.365
       
        'Case Is > 8 And Number < 11
    End Select
End Sub

У вас нет доступа для просмотра вложений в этом сообщении.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 24.09.2014 (Ср) 15:19

Mikle писал(а):заменяется одной строкой MatrixRotationYawPitchRoll.

что делает этот код
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 24.09.2014 (Ср) 17:56

Ты дал код 2D спрайтов-надписей... он ужасен :(
Самый смак - Select Case znak.
PilatP писал(а):можно ли как его ускорить

В первую очередь - не рисовать знаки по одному, а сначала генерировать геометрию (вертексный и индексный буфер на всю надпись), а потом рисовать одним вызовом DrawIndexedPrimitiveUp
PilatP писал(а):что делает этот код

Эта функция вращает сразу по трём осям.
PilatP писал(а):добавив вывод спрайта после меша, все и за крутилось,

Там у тебя строка:
MatrixTranslation mWorld, mXx, mYy, mZz

Она меняет матрицу mWorld, на эта матрица, видимо, Public, или Private, но на уровне модуля, то есть используется и другими процедурами. Потом в других процедурах используется уже изменённая матрица.
Я вижу, что ты не разбираешься, что делаешь, а пытаешься копипастить фрагменты кода.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 24.09.2014 (Ср) 18:15

Mikle писал(а):Я вижу, что ты не разбираешься, что делаешь, а пытаешься копипастить фрагменты кода.

что касается геометрии, в смысле матрицы, и др моменты, то да, я просто копирую код. :oops: :oops: :oops: я не понимаю как это работает (не понимаю как работают матрицы, и как ими пользоваться :roll: ).
Я никогда и не говорил что я профи, и знаю все. Я пишу как знаю.

Mikle писал(а):Ты дал код 2D спрайтов-надписей... он ужасен

Я знаю что код ужасен, и прекрасно понимаю что
Код: Выделить всё
Select Case znak.
это смерть фпс, вот по этому и выложил код, в надежде что, у других есть лучше идеи, как либо оптимизировать, либо предложить вариант :cry:

Mikle писал(а):В первую очередь - не рисовать знаки по одному, а сначала генерировать геометрию (вертексный и индексный буфер на всю надпись), а потом рисовать одним вызовом DrawIndexedPrimitiveUp

интересная идея, я об этом не подумал.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 24.09.2014 (Ср) 19:37

Mikle писал(а):Она меняет матрицу mWorld, на эта матрица, видимо, Public, или Private, но на уровне модуля, то есть используется и другими процедурами.

Обьявление матрицыdim и на уровне функции, правда она же обьявляется и в функции спрайта, это может влиять?
На сколько я знал, если переменная обьявлена в функции, то работает только в ней, если в модуле, то только в модуле, если Public то везде, или я ошибаюсь.
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 25.09.2014 (Чт) 15:32

PilatP писал(а):Обьявление матрицыdim и на уровне функции, правда она же обьявляется и в функции спрайта, это может влиять?

Нет.
PilatP писал(а):если переменная обьявлена в функции, то работает только в ней, если в модуле, то только в модуле, если Public то везде

Да. Только с учётом того, что, если переменная объявлена и в функции, и Public, то внутри функции используется её внутренняя переменная.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 25.09.2014 (Чт) 16:52

Mikle писал(а):Да. Только с учётом того, что, если переменная объявлена и в функции, и Public, то внутри функции используется её внутренняя переменная.

То есть у меня есть Public mView As D3DMATRIX, обьявленая в классе, и если я еще раз их вот так обьявлю

Код: Выделить всё
Public Sub Draw()
dim  mView As D3DMATRIX, mProj As D3DMATRIX

то результат mView не выйдет из Public Sub Draw() и Public mView As D3DMATRIX не изменится
Я не волшебник, я только учусь)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.09.2014 (Чт) 17:07

Да. Ну если ты не передашь матрицу из процедуры куда-то во вне, откуда будет доступ к обеим.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 25.09.2014 (Чт) 17:14

PilatP писал(а):результат mView не выйдет из Public Sub Draw() и Public mView As D3DMATRIX не изменится

Да. Есть правило - стараться никогда не делать Public то, что можно сделать Private.
Вообще - не очень хорошая идея, работать местами с шейдерами, а местами с FFP. Я попозже напишу тебе пару простых шейдеров для 2D и 3D спрайтов, чтобы вообще от FFP избавиться, код чище будет.
Qwertiy писал(а):Ну если ты не передашь матрицу из процедуры куда-то во вне, откуда будет доступ к обеим.

А как передашь? Параметром через ссылку? Тогда имя матрицы уже будет не mView, а то, какое у параметра.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.09.2014 (Чт) 17:18

Mikle писал(а):А как передашь? Параметром через ссылку? Тогда имя матрицы уже будет не mView, а то, какое у параметра.

Я имел в виду, что можно передать матрицу из процедуры в другую процедуру (да, под другим именем), которой доступна и public-матрица. Тогда эта процедура сможет переприсвоить или модифицировать public-матрицу в соответствии с этой. Я просто отвечал на вопрос о возможности изменения public-матрицы при существовании локальной с тем же именем.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 25.09.2014 (Чт) 17:27

Qwertiy писал(а):Тогда эта процедура сможет переприсвоить или модифицировать public-матрицу в соответствии с этой.

Она сможет её модифицировать и НЕ в соответствие с этой, может даже без передачи туда этой матрицы. В любом случае Public матрица будет изменена в другой процедуре.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.09.2014 (Чт) 17:31

Mikle писал(а):В любом случае Public матрица будет изменена в другой процедуре.

Ну да. Только вот о чём мы спорим? Не вижу никаких противоречий.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 25.09.2014 (Чт) 21:05

Mikle писал(а):Вообще - не очень хорошая идея, работать местами с шейдерами, а местами с FFP. Я попозже напишу тебе пару простых шейдеров для 2D и 3D спрайтов, чтобы вообще от FFP избавиться, код чище будет.

буду признателен :D , честно говоря, сам хотел об этом попросить.
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 27.09.2014 (Сб) 10:38

Для 2D спрайтов:
Добавь модуль с таким кодом:

Код: Выделить всё
Option Explicit

Private Type vFormat
  Pos As D3DVECTOR2
  tu0 As Single
  tv0 As Single
End Type

Dim vBuf(3) As vFormat
Dim PS As Direct3DPixelShader9
Dim VS As Direct3DVertexShader9
Dim vDecl As Direct3DVertexDeclaration
Dim kw As Single, kh As Single

Dim vSize As Long

Public Sub SpriteDraw(Tex As Direct3DTexture9, ByVal Left As Single, ByVal Top As Single, ByVal Width As Single, ByVal Height As Single)
  vBuf(0).Pos.x = -1 + Left * kw
  vBuf(0).Pos.y = 1 - (Top + Height) * kh
  vBuf(1).Pos.x = vBuf(0).Pos.x
  vBuf(1).Pos.y = 1 - Top * kh
  vBuf(2).Pos.x = -1 + (Left + Width) * kw
  vBuf(2).Pos.y = vBuf(0).Pos.y
  vBuf(3).Pos.x = vBuf(2).Pos.x
  vBuf(3).Pos.y = vBuf(1).Pos.y

  Dev.SetTexture 0, Tex
  Dev.SetVertexDeclaration vDecl
  Dev.SetVertexShader VS
  Dev.SetPixelShader PS
  Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(vBuf(0)), vSize
End Sub

Public Sub SpriteInit()
  kw = 1 / ScrCenterX
  kh = 1 / ScrCenterY
  VS_Create
  PS_Create
  vSize = Len(vBuf(0))
  vBuf(0).tu0 = 0
  vBuf(0).tv0 = 1
  vBuf(1).tu0 = 0
  vBuf(1).tv0 = 0
  vBuf(2).tu0 = 1
  vBuf(2).tv0 = 1
  vBuf(3).tu0 = 1
  vBuf(3).tv0 = 0
End Sub

Private Sub VS_Create()
  Dim vsDecl(3) As D3DVERTEXELEMENT9

  vsDecl(0) = VertexElement(0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0)
  vsDecl(1) = VertexElement(0, 8, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0)
  vsDecl(2) = VertexElementEnd

  Set vDecl = Dev.CreateVertexDeclaration(VarPtr(vsDecl(0)))
  Set VS = Dev.CreateVertexShaderFromFile(App.Path & "\ShaderCompiler\Out\Sprite.vsh.shader")
End Sub

Private Sub PS_Create()
  Set PS = Dev.CreatePixelShaderFromFile(App.Path & "\ShaderCompiler\Out\Sprite.psh.shader")
End Sub

Public Sub SpriteTerminate()
  Set PS = Nothing
  Set VS = Nothing
  Set vDecl = Nothing
End Sub

Сделай ScrCenterX и ScrCenterY Public.
Добавь в StartUp ПОСЛЕ CtrlInit инициализацию спрайта - SpriteInit.
В ClearAll, само собой, добавь SpriteTerminate.
Так же в StartUp добавь настройки альфаналожения:
Код: Выделить всё
  Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA

Вертексный шейдер Sprite.vsh:
Код: Выделить всё
vs_2_0

dcl_position v0
dcl_texcoord0 v1

mov oPos, v0
mov oT0, v1

Пиксельный шейдер Sprite.psh:
Код: Выделить всё
ps_2_0

dcl t0
dcl_2d s0

texld r0, t0, s0
mov oC0, r0

Теперь с помощь SpriteDraw можно выводить спрайт указанной текстурой на указанные координаты, если спрайт использует прозрачность - перед выводом нужно разрешать альфаналожение:
Код: Выделить всё
  Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE

А после вывода - запрещать:
Код: Выделить всё
  Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_FALSE

Если текстура спрайта должна быть создаваемой на ходу (какой-нибудь текст) - ещё раз рекомендую метод создания из AoS2.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 28.09.2014 (Вс) 16:12

Спасибо огромное Mikle, все просто, и здорово работает.
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 28.09.2014 (Вс) 16:15

Mikle писал(а):Если текстура спрайта должна быть создаваемой на ходу (какой-нибудь текст) - ещё раз рекомендую метод создания из AoS2.

честно говоря, я не до конца понял как это реализовано. Если тебя не затруднит, можеш пояснить как это реализовано, на сколько я понял, ты передаеш содержимое в текстуру, а что если нужно писать длинные надписи?
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 28.09.2014 (Вс) 17:34

PilatP писал(а):как это реализовано, на сколько я понял, ты передаеш содержимое в текстуру, а что если нужно писать длинные надписи?

На форма - PictureBox с AutoRedraw = True, Visible = False. Размер - по размеру надписи, такого же размера и текстура. В текстуре один мипуровень (параметр Levels = 1).
Из текстуры берётся сурфейс с индексом 0.
Печатаем в PictureBox с помощью Print нужный текст.
Считываем данные картинки в массив с помощью GetDIBits.
Отправляем в сурфейс с помощью SetData.
Всё, в этой текстуре уже нужная надпись.

Кстати, что ты имеешь ввиду под словами "3D спрайт"? Может тебе билборд нужен?

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 28.09.2014 (Вс) 20:13

Mikle писал(а):Печатаем в PictureBox с помощью Print нужный текст.

честно говоря меня, смущает Print, GetDIBits, SetData по быстродействию. Например, если нужно будет выводить много текста, более 100-200 символов, или много раз короткие, например более 20 строк(список).

Mikle писал(а):Кстати, что ты имеешь ввиду под словами "3D спрайт"? Может тебе билборд нужен?

Билборд очень нужен, и 3D спрайт например нужно будет отображать текстуру(солнце), по координатам
Я не волшебник, я только учусь)

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 29.09.2014 (Пн) 13:08

Код: Выделить всё

  MatrixTranslation Mt1, mXx, mYy, mZz 'установили координаты
  MatrixRotationYawPitchRoll Mt2, Ay, Ax, aZ ' вращение
  MatrixMultiply Mt1, Mt2, Mt1 'это на сколько я понял совместили их

  MatrixScaling Mt2, ScalX, ScalY, ScalZ 'теперь размер
  MatrixMultiply Mtrx, Mt2, Mt1 'опять совместили

  MatrixMultiply Mtrx, Mtrx, mView 'а эти на сколько я понял отрисовали на общей матрице
  MatrixMultiply Mtrx, Mtrx, mProj ' эта загадка
  MatrixTranspose Mtrx, Mtrx '?

Mikle, так же правельно, код работает, но на всякий случай думаю спрошу
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 29.09.2014 (Пн) 13:24

Код: Выделить всё
  MatrixMultiply Mtrx, Mtrx, mView 'а эти на сколько я понял отрисовали на общей матрице
  MatrixMultiply Mtrx, Mtrx, mProj ' эта загадка

Это домножили мировую матрицу на матрицы обзора и проекции, чтобы, грубо говоря, получить матрицу преобразования из 3D мира на 2D экран.
Код: Выделить всё
  MatrixTranspose Mtrx, Mtrx '?

Транспонировали (поменяли местами строки и столбцы) так как в шейдерах используется порядок не тот, что в FFP.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 29.09.2014 (Пн) 17:24

Mikle писал(а):
Код: Выделить всё
  MatrixTranspose Mtrx, Mtrx '?

Транспонировали (поменяли местами строки и столбцы) так как в шейдерах используется порядок не тот, что в FFP.

честно говоря мало понятно, что делает этот код, думаю потом разберусь. Mikle, ты говорил о билборде :oops:
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 30.09.2014 (Вт) 9:03

PilatP писал(а):честно говоря мало понятно, что делает этот код

Транспозиция матрицы - это просто смена местами столбцов и строк. Просто в шейдер матрицу удобно передавать именно в таком виде, матрица туда передаётся четырьмя 4D векторами, так вот нам нужно, чтобы эти вектора содержали не строки, а столбцы.
PilatP писал(а):ты говорил о билборде

3D спрайт - это просто модель из двух треугольников, единственное, что его отличает от обычного меша - это возможная необходимость того, чтобы он был виден сзади. Это решается сменой CullMode на CullNone.
А билборд - это 3D спрайт с определённым образом рассчитанной трансформацией. Сделаю.

PilatP
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 24.08.2009 (Пн) 1:00
Откуда: Херсон

Re: Шейдеры с нуля

Сообщение PilatP » 30.09.2014 (Вт) 10:15

Mikle писал(а):3D спрайт - это просто модель из двух треугольников, единственное, что его отличает от обычного меша - это возможная необходимость того, чтобы он был виден сзади. Это решается сменой CullMode на CullNone.

Да это я знаю, вопрос в том как можно его крутить, сколько пробовал через матрицы не получается :oops:
Я не волшебник, я только учусь)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3837
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Шейдеры с нуля

Сообщение Mikle » 30.09.2014 (Вт) 14:27

PilatP писал(а):как можно его крутить, сколько пробовал через матрицы не получается

Точно так же, как крутится в демке автомат.
Вот модуль для 3D спрайта, назвал его Face:
Код: Выделить всё