Как, распознать меш отображонный много раз?

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

Модератор: Mikle

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

Как, распознать меш отображонный много раз?

Сообщение PilatP » 07.02.2013 (Чт) 10:53

Как распознать меши, рисуя один меш например 10 раз, но с разными координатами. Как определить индекс одного и того же меша. Загружать 10 раз модель, не практично, но тогда встает проблема с выбором обьекта(меш то один для всех 10)
Вот например, все обьекты (планеты, солнце, фон) это один меш. Intersect находит первый нарисованый(это фон), но остальные. Подскажи как можно, это сделать (желательно код)
screenshot0001.jpg

вот код как происходит рендер
Код: Выделить всё
Option Explicit
Public KolSustemPlanet As Integer, SkyID_Tex As Integer, SkyID_Mesh As Integer

Public Enum eTypObj
    sSun = 0
    sPlanet = 1
    sAster = 2
    sShip = 3
    sStation = 4
End Enum

Private Sustem_Mesh() As Sustem_Obj
Private Type Sustem_Obj
  PosX As Single
  PosY As Single
  PosZ As Single
  РадиусТела As Single
  РадиусОрбиты As Single
  Сутки As Single
  ОрбитаСкорость As Single
  Faza As Single
  ID_Mesh As Integer
  ID_Tex As Integer
 
  Type_Obj As eTypObj
  Class_Obj As Integer
  Obj_Name As String
End Type

Private t As Double

'=================================================================
'==                                                             ==
'==                     Render Sustem                           ==
'==                                                             ==
'=================================================================
Public Sub Sustem_Draw()
Dim SekX As Double, SekY As Double
Dim i As Integer, Steps As Single
Dim vI As D3DVECTOR
Dim d As Single
Dim h As Long
Dim it As Single
SkyID_Tex = Find_Texturs("Sky1.dds")
    D3DDevice.SetRenderState D3DRS_ZENABLE, 1
    D3DDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
    D3DDevice.SetRenderState D3DRS_LIGHTING, 1
    DrawSusMesh Mesh_Model(SkyID_Mesh), 0, 0, 0, SkyID_Tex, Sustem_Mesh(0).РадиусТела * 100000, Sustem_Mesh(0).РадиусТела * 100000, Sustem_Mesh(0).РадиусТела * 100000
            DrawSusMesh Mesh_Model(Sustem_Mesh(0).ID_Mesh), 0, 0, 0, Sustem_Mesh(0).ID_Tex, Sustem_Mesh(0).РадиусТела, Sustem_Mesh(0).РадиусТела, Sustem_Mesh(0).РадиусТела
       
       For i = 1 To 8
            If Rend_Setka = True Then
                Lines sКруг, 0.5, vec3(0, 0, 0), vec3(0, 0, 0), &HFFFFFF, Nothing, Sustem_Mesh(i).РадиусОрбиты
            End If
            Sustem_Mesh(i).PosX = -Sustem_Mesh(i).РадиусОрбиты * Sin(Sustem_Mesh(i).ОрбитаСкорость * t + Sustem_Mesh(i).Faza): Sustem_Mesh(i).PosZ = Sustem_Mesh(i).РадиусОрбиты * Cos(Sustem_Mesh(i).ОрбитаСкорость * t + Sustem_Mesh(i).Faza)
            Sustem_Mesh(i).PosY = 0
            'If Обьект(ind).RotX > g_pi Then Обьект(ind).RotX = -g_pi
            'If Обьект(ind).RotY > g_pi Then Обьект(ind).RotY = -g_pi
            'If Обьект(ind).RotZ > g_pi Then Обьект(ind).RotZ = -g_pi
            DrawSusMesh Mesh_Model(Sustem_Mesh(i).ID_Mesh), Sustem_Mesh(i).PosX, Sustem_Mesh(i).PosY, Sustem_Mesh(i).PosZ, Sustem_Mesh(i).ID_Tex, Sustem_Mesh(i).РадиусТела, Sustem_Mesh(i).РадиусТела, Sustem_Mesh(i).РадиусТела
           
  D3DXVec3Scale vI, CamPos, -1
  D3DXVec3Normalize vI, vI  'Инвертированная нормализованная позиция камеры (направление луча)
  D3DX.Intersect Mesh_Model(SkyID_Mesh).Model, CamPos, vI, h, 0, 0, 0, d, 0
  If h Then
    DrawText sArial, "Mesh - " & i & " Distance" & d, 1, 105, D3DColorARGB(255, 255, 0, 0)
    'D3DXVec3Scale vI, vI, d
    'D3DXVec3Add v, v, vI
    'D3DXMatrixTranslation Mtrx, v.X, v.y, v.z
    'D3DDevice.SetTransform D3DTS_WORLD, Mtrx
    'Sphere.DrawSubset 0
  End If
       Next
       t = t + 0.0005
  D3DXMatrixIdentity matWorld
  D3DDevice.SetTransform D3DTS_WORLD, matWorld
   
End Sub

Private Sub Class_Initialize()
    Dim i As Integer
    KolSustemPlanet = 10
    ReDim SustemIDTex(KolSustemPlanet)
    ReDim Sustem_Mesh(KolSustemPlanet)
    SkyID_Mesh = Find_Mesh_Name("Sky.X")
    SkyID_Tex = Find_Texturs("Sky9.jpg")
   
    i = 0: Sustem_Mesh(i).РадиусТела = 320: Sustem_Mesh(i).РадиусОрбиты = 0: Sustem_Mesh(i).Сутки = -29: Sustem_Mesh(i).ОрбитаСкорость = 0: Sustem_Mesh(i).Faza = 0
    i = 1: Sustem_Mesh(i).РадиусТела = 5: Sustem_Mesh(i).РадиусОрбиты = 17000000: Sustem_Mesh(i).Сутки = -1 / 234: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 87.66: Sustem_Mesh(i).Faza = 2 * g_pi * 345 / 360:
    i = 2: Sustem_Mesh(i).РадиусТела = 50: Sustem_Mesh(i).РадиусОрбиты = 25000000: Sustem_Mesh(i).Сутки = 0.5: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 226.46: Sustem_Mesh(i).Faza = 2 * g_pi * 55 / 360
    i = 3: Sustem_Mesh(i).РадиусТела = 50: Sustem_Mesh(i).РадиусОрбиты = 40000000: Sustem_Mesh(i).Сутки = -1: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 365.26: Sustem_Mesh(i).Faza = 2 * g_pi * 10 / 360
    i = 4: Sustem_Mesh(i).РадиусТела = 45: Sustem_Mesh(i).РадиусОрбиты = 55000000: Sustem_Mesh(i).Сутки = -0.9: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 686.68: Sustem_Mesh(i).Faza = 2 * g_pi * 277.5 / 360
    i = 5: Sustem_Mesh(i).РадиусТела = 100: Sustem_Mesh(i).РадиусОрбиты = 70000000: Sustem_Mesh(i).Сутки = -0.5: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 4331.98: Sustem_Mesh(i).Faza = 2 * g_pi * 290 / 360
    i = 6: Sustem_Mesh(i).РадиусТела = 90: Sustem_Mesh(i).РадиусОрбиты = 94000000: Sustem_Mesh(i).Сутки = -0.3: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 10760.56: Sustem_Mesh(i).Faza = 2 * g_pi * 60 / 360
    i = 7: Sustem_Mesh(i).РадиусТела = 60: Sustem_Mesh(i).РадиусОрбиты = 114000000: Sustem_Mesh(i).Сутки = -0.3: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 30685.49: Sustem_Mesh(i).Faza = 2 * g_pi * 15 / 360
    i = 8: Sustem_Mesh(i).РадиусТела = 60: Sustem_Mesh(i).РадиусОрбиты = 128000000: Sustem_Mesh(i).Сутки = -0.5: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 60191.19: Sustem_Mesh(i).Faza = 2 * g_pi * 22 / 360
    i = 9: Sustem_Mesh(i).РадиусТела = 20: Sustem_Mesh(i).РадиусОрбиты = 7500000: Sustem_Mesh(i).Сутки = -27.32: Sustem_Mesh(i).ОрбитаСкорость = 2 * g_pi / 27.32: Sustem_Mesh(i).Faza = 2 * g_pi * 82.41 / 360
    i = 10: Sustem_Mesh(i).РадиусТела = 13: Sustem_Mesh(i).РадиусОрбиты = Sustem_Mesh(6).РадиусОрбиты: Sustem_Mesh(i).Сутки = 1: Sustem_Mesh(i).ОрбитаСкорость = Sustem_Mesh(6).ОрбитаСкорость: Sustem_Mesh(i).Faza = Sustem_Mesh(6).Faza
    t = -13490.4
    InitSustemMesh
End Sub

Public Function InitSustemMesh()
    Dim i As Integer, ind As Integer
    On Local Error Resume Next
    ind = Find_Texturs("EarthMap.dds")
    Sustem_Mesh(0).ID_Tex = Find_Texturs("Sun 1.dds")
    Sustem_Mesh(0).Type_Obj = sSun
    Sustem_Mesh(0).Class_Obj = 2
    Sustem_Mesh(0).Obj_Name = "Sun"
   
    For i = 1 To KolSustemPlanet - 1
        Sustem_Mesh(i).ID_Mesh = Find_Mesh_Name("Сфера.X")
        Sustem_Mesh(i).ID_Tex = ind
        Sustem_Mesh(i).Type_Obj = sPlanet
        Sustem_Mesh(i).Class_Obj = 1
        Sustem_Mesh(i).Obj_Name = "Planet"
    Next i

End Function


'Эта процедура рисует 3d объект в определённой точке пространства
Private Sub DrawSusMesh(ByRef mDrawing As GameMesh, mXx As Single, mYy As Single, mZz As Single, ind As Integer, Optional ScalX! = -1, Optional ScalY! = -1, Optional ScalZ! = -1, Optional RotX! = 0, Optional RotY! = 0, Optional RotZ! = 0)
Dim matWorld As D3DMATRIX
Dim matRot As D3DMATRIX
Dim matScal As D3DMATRIX
Dim matRotX As D3DMATRIX
Dim matRotY As D3DMATRIX
Dim matRotZ As D3DMATRIX

D3DXMatrixScaling matScal, ScalX, ScalY, ScalZ
D3DXMatrixRotationX matRotX, RotX
D3DXMatrixRotationY matRotY, RotY
D3DXMatrixRotationZ matRotZ, RotZ
D3DXMatrixMultiply matRot, matRotX, matRotY
D3DXMatrixMultiply matRot, matRot, matRotZ
If ScalX <> -1 Then D3DXMatrixMultiply matRot, matScal, matRot

D3DXMatrixTranslation matWorld, mXx, mYy, mZz
D3DXMatrixMultiply matWorld, matRot, matWorld
D3DDevice.SetTransform D3DTS_WORLD, matWorld
    Texture_StageStatesDisab
    D3DDevice.SetTextureStageState 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR
    D3DDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR
    D3DDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
    D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, False
            D3DDevice.SetTexture 0, Текстура(ind).Textures
            D3DDevice.SetTexture 1, Nothing
            D3DDevice.SetTexture 2, Nothing
    D3DDevice.SetMaterial mDrawing.MeshMaterials(0)
    mDrawing.Model.DrawSubset 0
  D3DXMatrixIdentity matWorld
  D3DDevice.SetTransform D3DTS_WORLD, matWorld
End Sub


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

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

Re: Как, распознать меш отображонный много раз?

Сообщение PilatP » 07.02.2013 (Чт) 11:25

Mesh_Model(SkyID_Mesh).Model - тут сама модель
SkyID_Mesh- ID меша (= Find_Mesh_Name("Сфера.X")) = 7
Sustem_Mesh(i).PosX - координаты где должен отобразится меш

D3DX.Intersect модель,позиция камеры, вектор, результат(пересек\нет)
все вроде верно, и результат есть, он определяет что выбрана сфера(фон).
но все обьекты это один и тодже меш. "Сфера.X"
Я понимаю так что нужно, в цикле проверять все обьекты сцены, с разными мешами проблем нет, но когда он один и размножен по разным координатам :?: тут проблема. так как в сути меш только один. А проверяем мы меш на пересечение, и то что он по разным координатам, он покажет лиш то что меш был выбран, но какой именно из 10 клонов. Может у кого есть идеи, а то уже сломал голову :roll:

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

           DrawSusMesh Mesh_Model(Sustem_Mesh(i).ID_Mesh), Sustem_Mesh(i).PosX, Sustem_Mesh(i).PosY, Sustem_Mesh(i).PosZ, Sustem_Mesh(i).ID_Tex, Sustem_Mesh(i).РадиусТела, Sustem_Mesh(i).РадиусТела, Sustem_Mesh(i).РадиусТела
           
  D3DXVec3Scale vI, CamPos, -1
  D3DXVec3Normalize vI, vI  'Инвертированная нормализованная позиция камеры (направление луча)
  D3DX.Intersect Mesh_Model(SkyID_Mesh).Model, CamPos, vI, h, 0, 0, 0, d, 0
  If h Then
    DrawText sArial, "Mesh - " & i & " Distance" & d, 1, 105, D3DColorARGB(255, 255, 0, 0)
    'D3DXVec3Scale vI, vI, d
    'D3DXVec3Add v, v, vI
    'D3DXMatrixTranslation Mtrx, v.X, v.y, v.z
    'D3DDevice.SetTransform D3DTS_WORLD, Mtrx
    'Sphere.DrawSubset 0
  End If
Я не волшебник, я только учусь)

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

Re: Как, распознать меш отображонный много раз?

Сообщение PilatP » 07.02.2013 (Чт) 12:37

Рылся в исходниках, и нашол код по выводу надписей над обьектами.
Вот может кому пригодится
Код: Выделить всё
Private Sub RenderText_Obj(ind As Integer)
    Dim viewport As D3DVIEWPORT8
    Dim projmatrix As D3DMATRIX
    Dim viewmatrix As D3DMATRIX
    Dim vOut As D3DVECTOR
   
    D3DDevice.GetViewport viewport
    D3DDevice.GetTransform D3DTS_PROJECTION, projmatrix
    D3DDevice.GetTransform D3DTS_VIEW, viewmatrix
    D3DXVec3Project vOut, vec3(Sustem_Mesh(ind).PosX, Sustem_Mesh(ind).PosY, Sustem_Mesh(ind).PosZ), viewport, projmatrix, viewmatrix, matWorld    'Frame.GetUpdatedMatrix
    'D3DXVec3Project vOut, vec3(0, 0, 0), viewport, projmatrix, viewmatrix, matWorld 'Frame.GetUpdatedMatrix
     
    'Debug.Print vOut.x, vOut.y, "Frame.ObjectName" '
    DrawText sArial, "Object " & ind, Val(vOut.X - 20), Val(vOut.y - 50), D3DColorARGB(255, 255, 255, 255)
End Sub


Выводит нормально, но почему то дублирует надпись на обратной стороне(то есть надпись и спереди, и если развернутся на 180 тоже) В принцепе если убрать, дублирование то это вариант решения проблемы(хотя и на половину)
вот скрины на них видно что обьект 5 дублируется
вид на обьект
screenshot0003.jpg

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

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

Re: Как, распознать меш отображонный много раз?

Сообщение Mikle » 07.02.2013 (Чт) 14:27

Довольно подробно это обсуждалось тут:
viewtopic.php?t=43874&p=6762069#p6762069
и примеры сохранились.
В этой теме тоже есть пример:
viewtopic.php?t=43495&p=6758216#p6758216

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

Re: Как, распознать меш отображонный много раз?

Сообщение PilatP » 07.02.2013 (Чт) 18:04

Спасибо Mikle, я разобрался, все дело было в матрицах. Все отлично работает, только для центра экрана. Подставил твой код из ланда с чайником
Код: Выделить всё
    vDir = vec3(-Sin(Angle) * Cos(pitch), Sin(pitch), Cos(Angle) * Cos(pitch))' это для центра экрана это олично работает
    ' а это как я понял для мышки но не в центре экрана и он не верно работает в моем случае
    D3DXMatrixRotationX mDir, pitch
    D3DXMatrixRotationY matView, Angle
    D3DXMatrixMultiply mDir, matView, mDir
    D3DXMatrixTranspose mDir, mDir
    v = vec3(MouseX, MouseY, 0)
    D3DXVec3TransformCoord v, v, mDir
    D3DXVec3Add vDir, vDir, v


по выбору мышкой(не подвижная камера, и свободный курсор), но он не работает(в моем случае). Я плохо понимаю(в смысле я понимаю смысл, но не понимаю сам код) если тебе не сложно, опиши что он делает :oops: (Желательно по строкам)
Я не волшебник, я только учусь)

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

Re: Как, распознать меш отображонный много раз?

Сообщение Mikle » 08.02.2013 (Пт) 9:50

Я нашёл "лэнд с чайником" - там код немного другой, возможно это другая версия. Но смысл тот же:
Код: Выделить всё
    D3DXMatrixRotationX mDir, pitch
    D3DXMatrixRotationY matView, Angle
    D3DXMatrixMultiply mDir, matView, mDir ' Получили матрицу, описывающую разворот (без перемещения) камеры (не курсора)
    D3DXMatrixTranspose mDir, mDir ' Транспонировали потому, что действия над камерой противоположны действиям над объектами
    v = vec3(MouseX, MouseY, 0) ' Получили вектор из центра экрана на курсор в системе координат камеры
    D3DXVec3TransformCoord v, v, mDir ' Повернули для перевода в систему координат мира
    D3DXVec3Add vDir, vDir, v ' Прибавили вектор "из камеры в центр экрана", получили "из камеры на курсор"

Обрати внимание, что ScaleMode формы у меня перенастроено в Form_Load(), чтобы MouseX, MouseY возвращали правильные значения.

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

Re: Как, распознать меш отображонный много раз?

Сообщение PilatP » 08.02.2013 (Пт) 10:31

Спасибо Mikle. Код работает, на ура. Моя ошибка была, в том что я не вписал при старте
Код: Выделить всё
  MyForm.View_Pic.ScaleTop = Tan(FovY / 2)        'Я так понимаю это верхняя граница
  MyForm.View_Pic.ScaleHeight = -2 * MyForm.View_Pic.ScaleTop         'А это нижняя граница
  MyForm.View_Pic.ScaleLeft = -MyForm.View_Pic.ScaleTop / Aspect    'Левый предел границы
  MyForm.View_Pic.ScaleWidth = -2 * MyForm.View_Pic.ScaleLeft         'Правый предел границы

Я предпологал, что тут задана, (поправка), для того кода. Вопрос, можно как нить на лету вычислять, эту (поправку), не меняя Scale. У меня многое привязано, к экрану.
Что нибуть на подобее(пример груб, я с математикой не очень. Писал интуитивно :oops: )
Код: Выделить всё
'не работает, но я понимаю что где то ошибка
  'я так понимаю это для вычисления пределов поправки, для экрана с учетом FovY и Aspect
  scrYtan = 0.7602044 ' Tan(FovY / 2)'
  scrXtan = scrYtan / Aspect'
  ' Здесь собственно сами вычисления с учетом реальных координат мышки на экране
  temXtan = (MouseX / ScrX) * -(scrXtan / 2)'
  temYtan = (MouseY / ScrY) * -(scrYtan / 2)'

У тебя сделано так что поправка, берется уже готовая, я бы сам решил, но до конца не понимаю твоих преобразований со Scale.
Я не волшебник, я только учусь)

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

Re: Как, распознать меш отображонный много раз?

Сообщение Mikle » 08.02.2013 (Пт) 11:06

Вот с отвязкой от ScaleMode:
Код: Выделить всё
  Dim XX As Single, YY As Single
  Dim k As Single
    GetCursorPos MousePos
    k = Tan(FovY / 2)
    YY = (-MousePos.y / CenterY) * k + k
    k = k / Aspect
    XX = (MousePos.X / CenterX) * k - k
    vDir = vec3(-Sin(Angle) * Cos(Diff), Sin(Diff), Cos(Angle) * Cos(Diff))
    D3DXMatrixRotationX mDir, Diff
    D3DXMatrixRotationY Mtrx, Angle
    D3DXMatrixMultiply mDir, Mtrx, mDir
    D3DXMatrixTranspose mDir, mDir
    v = vec3(XX, YY, 0)
    D3DXVec3TransformCoord v, v, mDir
    D3DXVec3Add vDir, vDir, v

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

Re: Как, распознать меш отображонный много раз?

Сообщение PilatP » 08.02.2013 (Пт) 13:12

Отлично, Mikle спасибо огромное. Все как всегда безупречно работает. :-D
Еще, под шумок :) по поводу вывода надписи над обьектом, почему двоит надпись. Можеш глянуть. Пример я выдрал из SDK. Вот код.
Код: Выделить всё
Private Sub RenderText_Obj(ind As Integer)
    Dim viewport As D3DVIEWPORT8, projmatrix As D3DMATRIX, viewmatrix As D3DMATRIX, vOut As D3DVECTOR
    D3DDevice.GetViewport viewport
    D3DDevice.GetTransform D3DTS_PROJECTION, projmatrix
    D3DDevice.GetTransform D3DTS_VIEW, viewmatrix
    D3DXVec3Project vOut, vec3(Sustem_Mesh(ind).PosX, Sustem_Mesh(ind).PosY, Sustem_Mesh(ind).PosZ), viewport, projmatrix, viewmatrix, matView    'Frame.GetUpdatedMatrix
    DrawText sArial, "Object " & ind, Val(vOut.X - 20), Val(vOut.y - 50), D3DColorARGB(255, 255, 255, 255)
End Sub

Смысл таков передаю координаты 3D, получаю 2D координаты обьекта на экране. Все просто, беда в том что отображается надпись и тогда когда повернут спиной к обьекту. Посмотри пожалуста
Я не волшебник, я только учусь)


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList