Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.08.2026, 16:34
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Плохо как привязать модель к костям

Здравствуйте! у меня есть модель 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  
Старый 22.08.2026, 19:00
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Злость тупик

кто нибудь сталкивался с этим?
Ответить с цитированием
  #3  
Старый 24.08.2026, 07:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,116
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А какую ошибку то выдает?

Скорее всего, что-то типа "объект не найден".
то, что выдает твой код в Memo1, не соответсвует имени, которое ты ищешь. Ну и префикс "Name:", возможно, не нужен.
Ответить с цитированием
  #4  
Старый 24.08.2026, 09:41
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Стрелка

Код:
 m:=GLActor1.Skeleton.BoneByName('mixamorig:HeadTop_End').GlobalMatrix;
GLFreeForm1.SetMatrix(MatrixMultiply(m, GLActor1.AbsoluteMatrix));
проблема не в имени костей. проблема что GLFreeForm1 стоит на месте даже не шевелится когда его прикручиваешь к ноге или к голове.

да если двигать актера:
Код:
if (IsKeyDown(vk_left)) then glactor1.Move(deltatime*50);
  if (IsKeyDown(vk_right)) then glactor1.Move(deltatime*-50);
то GLFreeForm1 тоже двигается, но у меня Анимированный smd с костями. и я бы хотел чтобы GLFreeForm1 повторял движение анимации (костей)
Ответить с цитированием
  #5  
Старый 24.08.2026, 10:36
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Сообщение движение

вернее двигался за костью
Ответить с цитированием
  #6  
Старый 25.08.2026, 08:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,116
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Хм, возможно ты не установил что-то типа подписки на обновление "родительского" объекта. Т.е. GLFreeForm1 просто не знает, что модель (кость) изменила положение. Возможно, та привязка, которую ты сделал, привязывает к модели в целом, а не к конкретной части, которая может двигаться сама.
Ответить с цитированием
  #7  
Старый 23.09.2026, 20:16
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Плохо часть 2

теперь я знаю даже как повернуть:
Код:
   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
и уже
Ответить с цитированием
  #8  
Старый 25.09.2026, 04:02
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Восклицание видео

в общем вот такая беда
Видео
Ответить с цитированием
  #9  
Старый 26.09.2026, 07:01
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 94
Репутация: 10
Плохо test

в общем я взял простую модель 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);
все отлично работает! значит проблема в модели после экспорта с костями.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2026