Skip to content

Can't set amount of segments for shapes within compoundBody #443

Open
@DaveSeidman

Description

Thanks in advance for this module, it's very performant and fairly straightforward to implement!

I am using this library to calculate physics for toruses (rings) which I'm achieving by creating a ring of spheres and passing the shapes array to a CompoundBody. This is working as expected, however I'd like to the ability to turn down the amount of segments on each sphere. I've tried using the second two args which I'd assume behave the same as they would if one was implementing the sphereBody outside of a compoundBody. However, when I enable the Debug view (which I assume is displaying the real geometries cannon is using to calculate collisions) I don't see any change in the amount of segments. I've also tried putting negative numbers and even strings in place and the library doesn't even throw an error so I'm guessing anything other than the first parameter (radius) is ignored.

Here is my relevant code which is a component within a ReactJS app:

import React, { useRef } from 'react';
import { useCompoundBody } from '@react-three/cannon';
import { MeshTransmissionMaterial } from '@react-three/drei';

function Ring(props) {
  const { position } = props;
  const shapes = [];
  const radius = 1;
  const segments = 8;
  for (let i = 0; i < 1; i += (1 / segments)) {
    const angle = i * 2 * Math.PI;
    shapes.push({
      args: [0.4, 1, 1], // <- second two properties are ignored
      position: [radius * Math.cos(angle), radius * Math.sin(angle), 0],
      type: 'Sphere',
    });
  }
  const [ref, api] = useCompoundBody(
    () => ({
      mass: 1,
      position,
      shapes,
    }),
    useRef(),
  );

  return (
    <group>
      <mesh ref={ref}>
        <torusGeometry />
        <MeshTransmissionMaterial
          transmission={0.9}
          roughness={0.1}
          thickness={0.5}
          ior={1.5}
          reflectivity={0.1}
          color={0xee6688}
          backsideThickness={0.1}
        />
      </mesh>
    </group>
  );
}

export default Ring;

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