Skip to content

JointData.revolute multiple axes #279

@EthanHermsey

Description

@EthanHermsey

Hey,

I am having trouble with revolute joints. I have tried this with https://cdn.skypack.dev/@dimforge/rapier3d-compat and with webpack and @dimforge/rapier3d@0.8.0-alpha.2.

The javascript 3d userguide ánd the joint example shows that you can provide anchor, axis, anchor, axis arguments:

let x = { x: 1.0, y: 0.0, z: 0.0 };
let params = RAPIER.JointParams.revolute({ x: 0.0, y: 0.0, z: 1.0 }, x, { x: 0.0, y: 0.0, z: -3.0 }, x);
let joint = world.createImpulseJoint(params, body1, body2, true);

Those examples both use this RAPIER.JointParams.revolute. However in the docs and in the RAPIER instance I load there's only RAPIER.JointData.revolute. That version of the revolute function only takes 3 arguments; anchor, anchor, axis.

 JointData.revolute = function (anchor1, anchor2, axis) {
        var res = new JointData();
        res.anchor1 = anchor1;
        res.anchor2 = anchor2;
        res.axis = axis;
        res.jointType = JointType.Revolute;
        return res;
    };
    pub fn new(axis: UnitVector<Real>) -> Self {
        let data = GenericJointBuilder::new(JointAxesMask::LOCKED_REVOLUTE_AXES)
            .local_axis1(axis)
            .local_axis2(axis)
            .build();
        Self { data }
    }

I would really like to be able to use specific axes per body. I don't even understand how it would work with just one. Am I doing something wrong, or is this a translation error or something? It should be Axis1, Axis2.

For example, if you connect two cuboid body's with a revolute joint; body1 on the top and body2 on the right side. You'd want to set the y-axis for body1 and the x-axis for body2. Right?

Thanks in advance,

Ethan

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions