我这个实验有两个问题:
1.不太清楚一开始把物体更改到 -5 0 0 是通过 translation 更改吗?而且我改这个物体位置仍然在 0 0 0,没有反应。
这难道是和之前 1.几必做实验有关系吗

还有我写了 Scene::simulation_update Object::update forward_euler_step,里面有更新物体位置的部分:
// 将物体的位置移动到下一步状态处,但暂时不要修改物体的速度。
center = next_state.position;
// 遍历 all_objects,检查该物体在下一步状态的位置处是否会与其他物体发生碰撞。
for (auto object : all_objects)
{
(void)object;
// 检测该物体与另一物体是否碰撞的方法是:
// 遍历该物体的每一条边,构造与边重合的射线去和另一物体求交,如果求交结果非空、
// 相交处也在这条边的两个端点之间,那么该物体与另一物体发生碰撞。
// 请时刻注意:物体 mesh 顶点的坐标都在模型坐标系下,你需要先将其变换到世界坐标系。
for (size_t i = 0; i < mesh.edges.count(); ++i)
{
array<size_t, 2> v_indices = mesh.edge(i);
(void)v_indices;
// v_indices 中是这条边两个端点的索引,以这两个索引为参数调用 GL::Mesh::vertex
// 方法可以获得它们的坐标,进而用于构造射线。
if (BVH_for_collision)
{
}
else
{
}
// 根据求交结果,判断该物体与另一物体是否发生了碰撞。
// 如果发生碰撞,按动量定理计算两个物体碰撞后的速度,并将下一步状态的位置设为
// current_state.position,以避免重复碰撞。
}
}
// 将上一步状态赋值为当前状态,并将物体更新到下一步状态。
prev_state = current_state;
velocity = next_state.velocity; // 更新速度
可以看到 center 和 velocity 都有更新
// 更新所有物体状态
while (remaining_time >= time_step)
{
for (auto& object : all_objects)
{
object->update(all_objects);
}
remaining_time -= time_step;
}
update 确实被调用了,前向欧拉写的没问题,这是什么原因呢?导致物体不动,箭头的轨迹倒是正常的,箭头可以正常移动。