Модератор: 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
Сейчас этот форум просматривают: Yandex-бот и гости: 25