Модератор: Mikle



Vovik писал(а):Давно пора!Yurich писал(а): Думаю не мешало-бы повторно, более глубоко заняться.

Yurich писал(а):Vovik писал(а):Давно пора!Yurich писал(а): Думаю не мешало-бы повторно, более глубоко заняться.
Только в купе с ВАМИ!



Я понимаю... мне хотяб этот алгоритм нормально.... а sliding - сам попробую придумать...d3drm писал(а):там не Sliding Colision Detection, а просто детекция столкновений, которая возвращает Да\нет. Скользящую детекцию все равно придется придумывать самому =)

Vovik писал(а):Я понимаю... мне хотяб этот алгоритм нормально.... а sliding - сам попробую придумать...d3drm писал(а):там не Sliding Colision Detection, а просто детекция столкновений, которая возвращает Да\нет. Скользящую детекцию все равно придется придумывать самому =)





Bonesnapper писал(а):Задам глупый вопрос![]()
Что такое
AABB и ОВВ

mVector a = E,
           b = obb.E,
           Pa = P,
           Pb = obb.P;
   mMatrix3 A = (mMatrix3)M,
            B = (mMatrix3)obb.M;
   //смещение в мировой системе координат
   mVector v = Pb - Pa;
   //смещение в системе координат А
   mVector T = A * v;
   //создаем матрицу поворота B относительно А
   const mMatrix3 R(A * B.Transpose());
  

http://gdlinks.hut.ru/cdfaq/obb.shtml#obb - вот линка.... там сверху я давал...Anatron писал(а):Откуда выдрал? По этому куску ничё не понятно...
Дай весь код - я те помогу. Anatron@mail.ru

Vovik писал(а):Тишина гробовая..... Ну че там, разобрался?


Я не так уж ничего не делаю... Я очень много делаю... Вот, че есть:d3drm писал(а):Vovik как я смотрю сам делать ничего не хочет, хоть бы пропостил пример со своими неудачными попытками.
алгоритм по ссылке весь описан, хоть совсем не подробно. Кода - совсем ничего. код перевести в принципе нечего делать, если действительно этим заняться.
Public Function CollisionSliding(Before As mVector3D, Position As mVector3D) As mVector3D
With XFile
  Dim PosF As D3DVECTOR, PosS As D3DVECTOR
  Dim DirF As D3DVECTOR, DirS As D3DVECTOR
    Dim t As Double
    
    Dim Vc(7) As D3DVECTOR
    Dim Mat1 As D3DMATRIX
    Dim Matrix As D3DMATRIX
    Dim i As Integer
      
    Vc(0) = Vec3D(.Box.Max.X, .Box.Min.Y, .Box.Min.Z)
    Vc(1) = Vec3D(.Box.Max.X, .Box.Min.Y, .Box.Max.Z)
    Vc(2) = Vec3D(.Box.Min.X, .Box.Min.Y, .Box.Max.Z)
    Vc(3) = Vec3D(.Box.Min.X, .Box.Min.Y, .Box.Min.Z)
    Vc(4) = Vec3D(.Box.Max.X, .Box.Max.Y, .Box.Min.Z)
    Vc(5) = Vec3D(.Box.Max.X, .Box.Max.Y, .Box.Max.Z)
    Vc(6) = Vec3D(.Box.Min.X, .Box.Max.Y, .Box.Max.Z)
    Vc(7) = Vec3D(.Box.Min.X, .Box.Max.Y, .Box.Min.Z)
  
    D3DXMatrixRotationX Matrix, -.Rotation.X
    D3DXMatrixRotationZ Mat1, -.Rotation.Z
    D3DXMatrixMultiply Matrix, Mat1, Matrix
    D3DXMatrixRotationY Mat1, -.Rotation.Y
    D3DXMatrixMultiply Matrix, Mat1, Matrix
    
    D3DXVec3TransformCoord Vc(0), Vc(0), Matrix
    D3DXVec3TransformCoord Vc(1), Vc(1), Matrix
    D3DXVec3TransformCoord Vc(2), Vc(2), Matrix
    D3DXVec3TransformCoord Vc(3), Vc(3), Matrix
    D3DXVec3TransformCoord Vc(4), Vc(4), Matrix
    D3DXVec3TransformCoord Vc(5), Vc(5), Matrix
    D3DXVec3TransformCoord Vc(6), Vc(6), Matrix
    D3DXVec3TransformCoord Vc(7), Vc(7), Matrix
    
  DirF.Z = 1
  DirS.X = 1
        
  D3DXVec3Normalize DirF, DirF
  D3DXVec3Normalize DirS, DirS
  PosF = Vec3D(Position.X, Position.Y, Position.Z)
  PosS = Vec3D(Position.X, Position.Y, Position.Z)
    
  PosF.Z = PosF.Z - 2
  PosS.X = PosS.X - 2
  Dim NewPos As mVector3D
   
  NewPos = Position
  If CollisionRayPlane(PosF, DirF, _
     Vc(1), Vc(2), Vc(6), Vc(5), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.Z = Before.Z
  End If
  If CollisionRayPlane(PosS, DirS, _
     Vc(1), Vc(2), Vc(6), Vc(5), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.X = Before.X
  End If
  If CollisionRayPlane(PosF, DirF, _
     Vc(0), Vc(3), Vc(7), Vc(4), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.Z = Before.Z
  End If
  If CollisionRayPlane(PosS, DirS, _
     Vc(0), Vc(3), Vc(7), Vc(4), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.X = Before.X
  End If
  If CollisionRayPlane(PosF, DirF, _
     Vc(0), Vc(1), Vc(5), Vc(4), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.Z = Before.Z
  End If
  If CollisionRayPlane(PosS, DirS, _
     Vc(0), Vc(1), Vc(5), Vc(4), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.X = Before.X
  End If
  If CollisionRayPlane(PosF, DirF, _
     Vc(2), Vc(3), Vc(7), Vc(6), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.Z = Before.Z
  End If
  If CollisionRayPlane(PosS, DirS, _
     Vc(2), Vc(3), Vc(7), Vc(6), t, 0, 0) Then
     If t > 0 And t < 4 Then NewPos.X = Before.X
  End If
CollisionSliding = NewPos
End With
End Function
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2