作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实例化一个 slider 约束,它允许 body 在 A 点和 B 点之间滑动。
为了实例化约束,我指定了两个物体进行约束,在这种情况下,一个动态物体被约束到静态世界,比如滑动门。
第三个和第四个参数是transformations,reference Frame A和reference Frame B。
为了创建和操作变换,该库支持四元数、矩阵和欧拉角。
默认 slider 约束沿 x 轴滑动主体。
我的问题是:
如何设置这两个变换,使 Body B 沿着由它自己的原点和空间中的一个附加点给定的轴滑动?
我天真地尝试过:
frameA.setOrigin(origin_of_point); //since the world itself has origin (0,0,0)
frameA.setRotation(Quaternion(directionToB, 0 rotation));
frameB.setOrigin(0,0,0); //axis goes through origin of object
frameB.setRotation(Quaternion(directionToPoint,0))
btTransform trafoA, trafoB;
trafoA.setIdentity();
trafoB.setIdentity();
vec3 bodyorigin(entA->getTrafo().col_t);
vec3 thisorigin(trafo.col_t);
vec3 dir=bodyorigin-thisorigin;
dir.Normalize();
mat4x4 dg=dgGrammSchmidt(dir);
mat4x4 dg2=dgGrammSchmidt(-dir);
btMatrix3x3 m(
dg.col_x.x, dg.col_y.x, dg.col_z.x,
dg.col_x.y, dg.col_y.y, dg.col_z.y,
dg.col_x.z, dg.col_y.z, dg.col_z.z);
btMatrix3x3 m2(
dg2.col_x.x, dg2.col_y.x, dg2.col_z.x,
dg2.col_x.y, dg2.col_y.y, dg2.col_z.y,
dg2.col_x.z, dg2.col_y.z, dg2.col_z.z);
trafoA.setBasis(m);
trafoB.setBasis(m2);
trafoA.setOrigin(btVector3(trafo.col_t.x,trafo.col_t.y,trafo.col_t.z));
btSliderConstraint* sc=new btSliderConstraint(*game.worldBody, *entA->getBody(), trafoA, trafoB, true);
btTransform rbat = rba->getCenterOfMassTransform();
btVector3 up(rbat.getBasis()[0][0], rbat.getBasis()[1][0], rbat.getBasis()[2][0]);
btVector3 direction = (rbb->getWorldTransform().getOrigin() - btVector3(trafo.col_t.x, trafo.col_t.y, trafo.col_t.z)).normalize();
btScalar angle = acos(up.dot(direction));
btVector3 axis = up.cross(direction);
trafoA.setRotation(btQuaternion(axis, angle));
trafoB.setRotation(btQuaternion(axis, angle));
trafoA.setOrigin(btVector3(trafo.col_t.x,trafo.col_t.y,trafo.col_t.z));
最佳答案
有没有可能你把这种方式弄得太复杂了?听起来像一个简单的参数转换 (x = p*A+(1-p)*B
) 就可以了。如果你的推拉门类比是准确的,那么整个旋转/方向的事情就是一个红鲱鱼。
另一方面,如果您试图限制两个方向之间的插值,则需要设置额外的限制,因为在一般情况下没有唯一的解决方案。
——马库斯
关于math - 帮我解决刚体物理/变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573795/
有谁知道如何旋转 CannonJS(物理库)CANNON.RigidBody?我试图让物体随相机旋转,所以两者都朝向相同的方向。我知道我必须修改四元数,但这不能正常工作: mPlayer.object
我是一名优秀的程序员,十分优秀!