![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! у меня есть модель smd и obj. к костям smd можно привязать
freeform или GLACTOR2 (obj) Код:
GLActor1.LoadFromFile('model\model2.smd');
GLFreeForm1.LoadFromFile('model\hair1.obj');
for i := 0 to 66 do begin
memo1.Lines.Add(GLActor1.Skeleton.BoneByID(i).Name);
end;Код:
GLFreeForm1.Parent:=(GLActor1.Skeleton.BoneByName('Name:bone1');bones.jpg |
|
#2
|
|||
|
|||
|
кто нибудь сталкивался с этим?
![]() |
|
#3
|
|||
|
|||
|
А какую ошибку то выдает?
Скорее всего, что-то типа "объект не найден". то, что выдает твой код в Memo1, не соответсвует имени, которое ты ищешь. Ну и префикс "Name:", возможно, не нужен. |
|
#4
|
|||
|
|||
|
Код:
m:=GLActor1.Skeleton.BoneByName('mixamorig:HeadTop_End').GlobalMatrix;
GLFreeForm1.SetMatrix(MatrixMultiply(m, GLActor1.AbsoluteMatrix)); да если двигать актера: Код:
if (IsKeyDown(vk_left)) then glactor1.Move(deltatime*50); if (IsKeyDown(vk_right)) then glactor1.Move(deltatime*-50); |
|
#5
|
|||
|
|||
|
вернее двигался за костью
![]() |
|
#6
|
|||
|
|||
|
Хм, возможно ты не установил что-то типа подписки на обновление "родительского" объекта. Т.е. GLFreeForm1 просто не знает, что модель (кость) изменила положение. Возможно, та привязка, которую ты сделал, привязывает к модели в целом, а не к конкретной части, которая может двигаться сама.
|
|
#7
|
|||
|
|||
|
теперь я знаю даже как повернуть:
Код:
boneMat := GLActor1.Skeleton.BoneByID(14).GlobalMatrix;
offset := CreateTranslationMatrix(VectorMake(0, -23, 0));
rotx := CreateRotationMatrixX(DegToRad(270));
roty := CreateRotationMatrixY(DegToRad(180));
combinedRot := MatrixMultiply(rotx, roty);
finalMat := MatrixMultiply(offset,
MatrixMultiply(combinedRot,
MatrixMultiply(boneMat, GLActor1.AbsoluteMatrix)));
GLFreeForm1.SetMatrix(finalMat); 3.jpg 4.jpg и уже ![]() |
|
#9
|
|||
|
|||
|
в общем я взял простую модель md5mesh и прицепил к костям куб.
Код:
boneMat := GLActor1.Skeleton.BoneByID(5).GlobalMatrix;
offset := CreateTranslationMatrix(VectorMake(3, 0, 0));
rotx := CreateRotationMatrixX(DegToRad(270));
roty := CreateRotationMatrixY(DegToRad(180));
combinedRot := MatrixMultiply(rotx, roty);
finalMat := MatrixMultiply(offset,
// MatrixMultiply(combinedRot,
MatrixMultiply(boneMat, GLActor1.AbsoluteMatrix));
GLCube1.SetMatrix(finalMat); значит проблема в модели после экспорта с костями. |