Войти
ПрограммированиеФорумФизика

Физика "на пальцах" (комментарии) (42 стр)

Страницы: 138 39 40 41 42 43 Следующая »
#615
7:22, 17 авг 2020

vindast
> MikeNew, и возьми ты мой класс как базу наконец, убедишься точно что дело в
> поворотах или же нет.
Сначала правильный расчет масс и инерций. Если после правильного расчета массы и инерции не заработает (это нужно первым делом, поскольку с неправильной инерции в принципе ничего работать нормально не будет, как я уже убедился.) - попробую твой класс.

#616
13:34, 17 авг 2020

MikeNew

float compMass1;
  compMass1 = glm::dot(l.n1, l.n1 * models[c.body1_N].invMass);
  compMass1 += glm::dot(l.w1, l.w1 * models[c.body1_N].invInertia);

  float compMass2;  
  compMass2 = glm::dot(l.n2, l.n2 * models[c.body2_N].invMass);
  compMass2 += glm::dot(l.w2, l.w2 * models[c.body2_N].invInertia);

Самый просто способ отладить это явно задать их значения, вставь такой костыль для отладки:

models[c.body1_N].invMass = 1.0f / 100.0f;
models[c.body2_N].invMass = 1.0f / 100.0f;
models[c.body1_N].invInertia= 1.0f / 10.0f;
models[c.body2_N].invInertia= 1.0f / 10.0f;

  compMass1 = glm::dot(l.n1, l.n1 * models[c.body1_N].invMass);
  compMass1 += glm::dot(l.w1, l.w1 * models[c.body1_N].invInertia);

  float compMass2;  
  compMass2 = glm::dot(l.n2, l.n2 * models[c.body2_N].invMass);
  compMass2 += glm::dot(l.w2, l.w2 * models[c.body2_N].invInertia);

У тебя будут заведомо правильные значения, которые попадут в джоинт.

#617
13:55, 17 авг 2020

vindast
> У тебя будут заведомо правильные значения, которые попадут в джоинт.
Ну если ты уверен что это так, тогда пробую твой класс и смотрю что получится, о результатах отпишусь.

#618
14:15, 17 авг 2020

vindast
> MikeNew, и возьми ты мой класс как базу наконец, убедишься точно что дело в
> поворотах или же нет.
Посмотрел твой класс. Так им пользоватся?:

rotate(glm::lenght(angularVel), glm::normalize(angularVel));
#619
15:22, 17 авг 2020

MikeNew
> Так им пользоватся?:
Да, смотри что бы вектор точно был нормализован.

MikeNew
> Ну если ты уверен что это так, тогда пробую твой класс и смотрю что получится,
> о результатах отпишусь.
Имею в виду именно корректные значения массы и инерции.

#620
18:23, 17 авг 2020

MikeNew
Осторожней с этим классом, он не поддерживает ортонормированность базиса.

#621
18:29, 24 авг 2020

vindast
> Имею в виду именно корректные значения массы и инерции.
Наконец дошли руки и сделал интеграцию угловой скорости как у тебя. Поставил как ты советовал массы 1/100 и моменты инерции 1/10 для отладки. Получилось то же, что и с умножением кватернионов, одинаковое поведение.

Выглядит как-то так, не дает покоя то, что видно как правый (зеленый) куб самую малость вращается быстрее (при столкновении в самом начале). Где-то недоработка или это нормальное поведение из-за погрешностей?:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#622
18:31, 24 авг 2020

MikeNew
> Где-то недоработка или это нормальное поведение из-за погрешностей?
это точно не нормальное поведение. Сравни с тем что в physx.

#623
18:33, 24 авг 2020

samrrr
> Осторожней с этим классом, он не поддерживает ортонормированность базиса.
Я сделал так:

inline void physics::matrixIntegrateAngularVelocity(Model& model, glm::vec3& angVel) {

  float len = glm::length(angVel);
  if (len == 0.0f) return;
  glm::mat4 m = glm::rotate(glm::mat4(1.0f), len, glm::normalize(angVel));

  model.xAxis = glm::vec3(m * glm::vec4(model.xAxis, 1.0f));
  model.yAxis = glm::vec3(m * glm::vec4(model.yAxis, 1.0f));
  model.zAxis = glm::vec3(m * glm::vec4(model.zAxis, 1.0f));

  model.matRotate = glm::mat3(model.xAxis, model.yAxis, model.zAxis);
}

Сойдет? (это неоптимизированный вариант)

#624
18:40, 24 авг 2020

samrrr
> это точно не нормальное поведение. Сравни с тем что в physx.
Ок, сделаю по-новой на основе того когда из физикс-а, который ты тут запостил. Но, чувствую, будет то же самое.

#625
18:48, 24 авг 2020

MikeNew
Мне кажется что вообще какой-то бред получается. В инете вообще рассказывается какбудто вектор скорости поворота это скорости поворотов относительно осей x y z в локальном пространстве тела... Тут же ты просто крутишь вокруг оси...

попробуй повернуть 3 раза по осям x y z на соответствующие компоненты вектора. может лучше будет результат...

#626
18:49, 24 авг 2020

MikeNew
> glm::vec3
напиши неконец юзинг вектора от глм

#627
18:54, 24 авг 2020

samrrr
> В инете вообще рассказывается какбудто вектор скорости поворота это скорости
> поворотов относительно осей x y z в локальном пространстве тела... Тут же ты
> просто крутишь вокруг оси...
А разве в итоге получается не одно и то же?
samrrr
> напиши неконец юзинг вектора от глм
Здесь не понял про что ты.

#628
18:55, 24 авг 2020

samrrr
> попробуй повернуть 3 раза по осям x y z на соответствующие компоненты вектора.
> может лучше будет результат...
Ок, посмотрю. Но что-то мне подсказывает, все же, что это одно и то же.

#629
19:11, 24 авг 2020

MikeNew
> Здесь не понял про что ты.
юзинг глм::вец3;
погугли юзинги

MikeNew
> Но что-то мне подсказывает, все же, что это одно и то же.
а формула степеней свободы тройной молекулы...

Страницы: 138 39 40 41 42 43 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.