Что-то непонятное. Хочу сделать вращающуюся планету. Код:
Public Sub DrawMeshRoll(ByRef mDrawing As GameMesh, myX As Single, myY As Single, myZ As Single, matObj As D3DMATRIX)
Dim idMat As D3DMATRIX, i As Long
D3DXMatrixRotationY matObj, Timer / 4
idMat=matObj
D3DXMatrixTranslation matObj, myX, myY, myZ
D3DXMatrixMultiply idMat, idMat, matObj
g_D3DDevice.SetTransform D3DTS_WORLD, idMat
'Рисую subset
End Sub
У планеты своя матрица, как и у всех объектов. Всё рисуется, вращается. Но - функция IntersectM перестаёт работать, если вращать меш (при простом перемещении работает нормально). Вывод - В каком-то месте кода с перемещением/вращением матриц ошибка. Вопрос - что я делаю неправильно?
Кстати, код функции IntersectM:
' matObj - матрица конкретного объекта
Function intersectM(m As D3DXMesh, matObj As D3DMATRIX) As Boolean
Dim vista As D3DVIEWPORT8
Dim hit As Long
Dim numFacesI As Long
Dim U As Single
Dim v As Single
Dim dist As Single
Dim chits As Long
g_D3DDevice.GetViewport vista
' vPos - позиция камеры
D3DXVec3Unproject frontV, vPos, vista, matProj, camView, matObj
' vDir - вектор направления камеры
g_D3DX.Intersect m, frontV, vDir, hit, numFacesI, U, v, dist, chits
If hit = 1 Then
intersectM = True
myDist = dist
Else
intersectM = False
myDist = 10000
End If
End Function
Проверьте. Читал что-то о необходимости инвертировать матрицу в этой функции, но не понял.