Подскажите, пожалуйста, что тут можно сделать?
Vert() - массив вершин, (их начальное положение).
Nodes().Absolut - матрица, полученная в результате трансформации скелета.
NewVert() - новый массив, (новое положение вершин).
- Код: Выделить всё
Call TransformSkeleton ' трансформация скелета
' трансформации вершин
For i = 0 To VertexCount
Call D3DXVec3TransformCoord (NewVert(i).Position, Vert(i), Nodes(VertNode(i)).Absolut)
Next
Call Render ' Отрисовка
- Код: Выделить всё
For i = 0 To VertexCount
Call D3DXVec3TransformCoord (NewVert(i).Position, Vert(i), Nodes(VertNode(i)).Absolut)
Next
Вот этот фрагмент, ужасно влияет на производительность.
Здесь еще я не указал отбраковку повторяющихся вершин (которые изменять не надо), но даже с ней тормозит ужасно.
Если одновременно анимируются 4 модели из HL (headcrab) - fps 35 - 40 (exe), 10 - 15 (VB IDE).
Если приведенный выше фрагмент закомментировать - fps 90 - 110 (exe).
Этот фрагмент, вставлял в Сишную DLL, оптимизированную на макс. скорость - выиграл около 5 кадров.
В HL при подобной ситуации (4 модели) - fps 70 - 75.
если все трансформации происходят через матрицы а не заменой координат вертексов, то все должно быть нормально.
d3drm
У меня как раз замена ветексов, в просмотрщике моделей HL, тоже, как в самой HL - не знаю, а как сделать через матрицы в моем случае.