Алгоритм столкновения луча с треугольником

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

Модератор: Mikle

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Алгоритм столкновения луча с треугольником

Сообщение Vovik » 31.12.2004 (Пт) 1:52

Вот собсно и весь вопрос, только желательно поточнее (100% определения), а не через раз, как мой.... :roll:

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 31.12.2004 (Пт) 16:06

Или хотяб отрезка.... Хоть какой-нть алгоритм - может будет получше, чем мой.... :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.12.2004 (Пт) 16:13

Позырь пример из SDK, там где вращается зверюга, и можно выбирать отдельный треугольник мышью.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 01.01.2005 (Сб) 12:25

GSerg писал(а):Позырь пример из SDK, там где вращается зверюга, и можно выбирать отдельный треугольник мышью.
Чтоб он у меня ещё был... :roll:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 01.01.2005 (Сб) 20:15

D3DX8.Intersect

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 06.01.2005 (Чт) 14:46

Yurich писал(а):D3DX8.Intersect


И что?
Как это должно помочь?
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 06.01.2005 (Чт) 16:15

KDima писал(а):
Yurich писал(а):D3DX8.Intersect


И что?
Как это должно помочь?


Dim Mesh As D3DXMesh
Dim ProjMatrix As D3DMATRIX
Dim CameraMatrix As D3DMATRIX

Private Sub Form1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim px As Single
Dim py As Single

D3DDevice.GetTransform D3DTS_PROJECTION, ProjMatrix
px = Int(X / Screen.TwipsPerPixelX)
py = Int(Y / Screen.TwipsPerPixelY)
ViewportPickEx ProjMatrix, CameraMatrix, px, py
End Sub

Function ViewportPickEx(ProjMatrix As D3DMATRIX, CameraMatrix As D3DMATRIX, X As Single, Y As Single) As Boolean
Dim Cursor As D3DVECTOR, vNear As D3DVECTOR
Dim vFar As D3DVECTOR, vDir As D3DVECTOR
Dim Mtemp As D3DMATRIX
Dim Viewport As D3DVIEWPORT8

D3Ddevice. GetTransform D3DTS_WORLD, Mtemp
D3DDevice.GetViewport Viewport
'!!! Здесь можно попробовать использовать к-ты камеры
Cursor.X = X: Cursor.Y = Y: Cursor.z = 0
' Вычислить вектор точки в плоскости курсора
D3DXVec3Unproject vNear, Cursor, Viewport, ProjMatrix, CameraMatrix, Mtemp
' Вычислить вектор точки в глубине
Cursor.z = 1
D3DXVec3Unproject vFar, Cursor, Viewport, ProjMatrix, CameraMatrix, Mtemp
' Вычислить вектор направления луча
D3DXVec3Subtract vDir, vFar, vNear
ViewportPickEx=Mesh_Intersect(vNear, vDir)

Function Mesh_Intersect(RayPos As D3DVECTOR, RayDir As D3DVECTOR) As Boolean
Dim RetHit As Long ' устанавливается в 1 если луч пересекает полигон меша
Dim RetU As Single ' U - координата попадания
Dim RetV As Single ' V - координата попадания
Dim RetDist As Single ' расстояние от источника луча до точки пересечения с
' ближайшим полигоном меша
Dim RetFaceIndex as Long ' индекс пересекаемого полигона
Dim CountHits As Long ' количество пересечений полигонов
If Mesh Is Nothing Then Exit Function
' проверка пересечения
Call D3DX.Intersect(Mesh, RayPos, RayDir, RetHit, RetFaceIndex, RetU, RetV, RetDist, CountHits)
If RetHit Then Mesh_Intersect = True
End Function

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 07.01.2005 (Пт) 0:39

Вау! Какой экземпл!
Пасиба!
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)


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

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

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

    TopList