parry3d-f64
3 dimensional collision detection library in Rust. 64-bits precision version.
0.30.2
6.5M downloads/mo
#3954 most downloaded on crates.io
dimforge/parry
What this package is like to depend on
Last release 15 days ago
08 Aug 2026
Release timing varies
gaps range from 2 weeks to 4 months
Nearly every release is documented
notes for 56 of 61 stable releases
4 versions withdrawn
withdrawn after publishing
6 years old
69 releases · first in 2021
15 releases in the last 12 months
see the full history below
Release timeline
69 releases · Jan 2021 to Aug 2026Releases
latest 60 of 69-
0.30.207 Aug 2026Release notes
Open source →Added
DebugforTriMeshnow prints a summary instead of just the type name (#177).query::contactnow supports heightfields, instead of returningErr(Unsupported)(#274).
Fixed
- Fix GJK reporting overlapping axisymmetric shapes as disjoint when the simplex stalls on a degenerate support direction (#396).
- Fix wrong shape-cast normals and distances for stalled GJK simplices, now classified as touching or penetrating from the solver's own distance bound (#193).
- Fix shape-casts missing grazing hits at large coordinates, by scaling the GJK ray-cast tolerance with the support magnitude (#180).
- Fix shape-cast time of impact being short by an amount scaling with the shape's extent (#429).
- Fix
ShapeCastStatus::PenetratingOrWithinTargetDistbeing reported for merely touching support-map casts (#106). - Fix
contactbetween exactly-touching shapes returning witness points at the shapes' centers (#315). - Fix
Triangle::areareturning wildly wrong values for degenerate triangles (#111). - Fix point projection on degenerate triangles reporting the point as inside (#76).
- Fix
segments_intersection2dclassifying exact segment endpoints asOnEdgeinstead ofOnVertex(#109). - Fix composite-shape point projection panicking on non-finite points (#395).
- Fix
HeightField::project_local_pointiterating on every element, making it O(rows * cols) (rapier#332). - Fix single-point contact manifolds on cylinder and cone caps, by orienting the cap's polygonal approximation toward the contact (rapier#810).
- Fix missing speculative contacts between a
Voxelsshape and a shape within the prediction distance (#404). - Fix
Voxelsshape-castwitness1not being expressed in the voxels shape's local frame (#373). - Fix an out-of-bounds panic in the binned BVH builder on degenerate leaf AABBs (rapier#961).
- Fix out-of-bounds indices in
to_outlinefor round shapes with a zero border radius (rapier#969). - Fix the quadratic polygon removal in
hertel_mehlhorn(#408). - Require
spade2.15, the minimum version providingtry_bulk_load_cdt(#428).
Modified
- Document the frame conventions of the
ShapeCastHitfields (rapier#933). - Document that the
Voxelsiterators only yield non-empty voxels (#382). - Document that
BoundingVolume::merge/mergeddon't guarantee strict containment of their inputs (#260).
-
0.30.2-glamx0.2-b08 Aug 2026 pre-releaseNothing published for this version
-
0.30.2-glamx0.208 Aug 2026 pre-releaseNothing published for this version
-
0.30.106 Aug 2026Release notes
Open source →Fixed
- Fix incorrect
closest_points_cuboid_cuboidclosest points (affectingquery::distancetoo) in degenerate configurations where the separating axis is ambiguous, e.g., axis-aligned cuboids closest at a vertex or along parallel edges.
- Fix incorrect
-
0.30.002 Aug 2026Release notes
Open source →Breaking changes
- The
simd-stableandsimd-nightlyfeatures were removed. 4-lane SIMD is now always enabled (it falls back to scalar code on targets without SIMD support). The new opt-insimd8feature widens SIMD to 8 lanes forf32builds; it requires an AVX-enabled target to actually emit 256-bit instructions, and is incompatible withenhanced-determinism. ContactManifold::subshape_pos1/subshape_pos2are no longer public fields. They are replaced by a single boxedsubshape_poses: Option<Box<SubshapePoses>>field (to shrinkContactManifold), accessed through the newsubshape_pos1()/subshape_pos2()getters andset_subshape_pos1/set_subshape_pos2setters.
Added
query::sweep_toi: sweep-based time-of-impact queries. A timestep is modeled as aSweepbetween two endpoint poses (linear translation + rotation nlerp), andsweep_time_of_impact(plussweep_time_of_impact_compositefor composite shapes) computes the earliest time the swept shapes reach a slop-based target separation, using conservative advancement. Also exportsToiProxy,SimplexCache,SweepToiOutput,SweepToiStatus, andSweepCompositeFastShape.Bvhgains incremental and parallel update APIs:refit_partial, flag-preservingrefit_without_resolvevariants,refit_parallel, parallel BVTT traversal, and batched parallel leaf updates (insert_or_update_batch_partially_parallel,reinsert_or_update_with_change_detection,reinsert_or_update_if_present,update_partially_if_present, and theBvhLeafUpdateStatusenum).
Modified
- Cuboid support-face feature ids are now computed with bit operations instead of lookup tables.
- The
-
0.29.004 Jul 2026Release notes
Open source →Breaking changes
- The
<Polyline as TypedCompositeShape>::PartNormalConstraintsis nowSegmentPseudoNormalsinstead of().
Fixed
- Fix
enhanced-determinismnot producing cross-platform deterministic results for parry3d/parry3d-f64. The feature now enablesglamx/scalar-mathto disable architecture-specific SIMD (NEON on arm64, SSE2 on x86_64) which caused floating-point non-associativity in Vec3/Vec4/Quat dot products. - Oriented (one-sided) 2D polylines (#254). Build a
PolylinewithPolylineFlags::ORIENTEDviaPolyline::with_flags, or toggle it withPolyline::set_flags, to clamp contact normals to the outward side. This removes the spurious sideways push a body gets at a convex corner of a thin double-sided polyline. A single 2D flag covers whatTriMeshsplits acrossTriMeshFlags::ORIENTED(assume an outward orientation and compute pseudo-normals) andTriMeshFlags::FIX_INTERNAL_EDGES(use them to clamp contact normals). Also addsPolyline::flags,Polyline::segment_normal_constraints, and thePolylineFlags/SegmentPseudoNormalstypes. (#425)
- The
-
0.28.028 May 2026Release notes
Open source →-
feat: improve publish-script + fix building parry3d-f64 standalone
-
chore: add publish dry-run to CI
Release notes
Open source →Breaking changes
CompositeShapeRef::project_local_pointandproject_local_point_and_get_featurenow returnOption<...>instead of unwrapping internally, and take an additionalmax_distparameter that bounds the search distance.
Modified
- Bump
glamxto 0.3 (built onglam0.33),simbato 0.10,rstarto 0.13,hashbrownto 0.17,randto 0.10, andkiss3d(visual examples) to 0.42. - Many shape, AABB, and voxel internals were reworked to avoid bracket-indexing of
glamvectors, which is not supported on SPIR-V targets. A newVectorExt::vget/vsetAPI and afor_each_dim!macro are now used in place ofv[i].parry3d'sallocfeature also now gatessmallvec,downcast-rs,rstar, andglamx/approx, so the no-alloc build can target SPIR-V.
Fixed
- Fix
Bvh::scale/BvhNode::scaleproducing an inverted AABB on negative scale components, which silently broke queries on shapes scaled with reflections (e.g.TriMesh::scaled). Scale components must now be non-zero (previously: positive) (#406). - Fix
Voxels::scalednot scaling the internal chunk BVH, causing queries on scaled voxels to miss geometry (#419). - Fix
Bvh::optimize_incrementalpanicking after multipleremoves without an interveningrefitwhen the root collapses to a partial root, leaving orphaned wide nodes (#409). - Correct the assertion message on
Aabb/BoundingSphere'sloosen/tighten(and their*_edvariants) to "must be non-negative" (#394). - Fix multiple EPA failures on large coordinate magnitudes by scaling the face-rejection tolerance relative to the simplex vertex magnitudes (#415).
- Fix CCD edge cases (in both ball-vs-ball and support-map-vs-support-map casts) where casts
starting at (or very close to) the contact boundary with a near-tangent direction would return
an unreliable normal. The fallback now uses the contact query to recover a robust closest-point
normal, and the small-TOI threshold was relaxed from
1e-5to1e-4. - Fix
Aabb::cast_local_ray_and_get_normalpanicking with a subtraction overflow when casting a zero-direction ray starting inside the AABB (#383). - Fix infinite loop in
TriMesh::intersection_with_local_planeon degenerate adjacency graphs that don't loop cleanly back to the starting index (#398). - Fix panic in
mesh_intersectionwhen constraint edges overlap (e.g. for co-planar triangles). Overlapping constraints are now skipped instead of crashing the CDT (#389). - Fix panic in 3D voxelization's internal convex-hull step by falling back to
try_convex_hulland returning an empty hull on failure (#347). - Fix
WSign::copy_sign_toon non-CUDA targets by using the nativecopysign(the bit-twiddling workaround is now scoped tonvptx64, wherecuda_std'scopysigndoes not compile).
-
-
0.27.028 May 2026 -
0.26.112 May 2026Release notes
Open source →Added
- Added
Bvh::traverse_indexedto traverse only a part of the subtree, and to retrieve the node’s indices (#416).
Fixed
- Fix
Bvh::optimize_incrementalbeing non-deterministic when restored from a serialized snapshot. The incremental optimization state is now stored on theBvhitself (instead of the non-serializableBvhWorkspace) so it survives serialization/deserialization (#403).
- Added
-
0.26.009 Jan 2026Release notes
Open source →Breaking changes
This release migrates parry from
nalgebratoglam(via theglamxcrate) for future compatibility withrust-gpu. This is a major breaking change affecting almost all public APIs.Type renames
Isometry→Pose(usingglamx::Pose2/Pose3)Rotation→Rot2/Rot3(usingglamx::Rot2/Rot3)IsometryOps→PoseOpsIsometryOpt→PoseOpt
Removed types
Point<Real>- useVectorinstead. Points and vectors are now unified.UnitVector<Real>- useVectorinstead. Normalization is no longer encoded in the type.Translation<Real>- useVectorfor translations.
Math type changes
Vectoris nowglam::Vec2/Vec3/DVec2/DVec3depending on dimension and precision featuresMatrixis nowglam::Mat2/Mat3/DMat2/DMat3- The
mathmodule now re-exports glam types and provides dimension-agnostic aliases
API signature changes
- Many functions that previously took
&Point<Real>or&Vector<Real>now takeVectorby value - Functions taking
&Isometry<Real>now take&PoseorPoseby value HalfSpace::newnow takesVectorinstead ofUnit<Vector<Real>>- Shape constructors like
Segment::new,Triangle::new,Capsule::newnow takeVectorinstead ofPoint Aabb::minsandAabb::maxsare nowVectorinstead ofPoint<Real>
Migration guide
If your codebase currently relies on
nalgebra, note thatnalgebraandglamxprovide type conversion. Enable the corresponding features:nalgebra = { version = "0.34", features = [ "convert-glam030" ] }glamx = { version = "0.1", features = ["nalgebra"] }then you can convert betweenglamandnalgebratypes using.into().
// Before (nalgebra) use parry3d::na::{Point3, Vector3, Isometry3, Unit}; let point = Point3::new(1.0, 2.0, 3.0); let vector = Vector3::new(1.0, 0.0, 0.0); let normal = Unit::new_normalize(vector); let pos = Isometry3::translation(1.0, 2.0, 3.0); // After (glam) use parry3d::math::{Vector, Pose}; let point = Vector::new(1.0, 2.0, 3.0); // Points are now Vector let vector = Vector::X; let normal = vector.normalize(); // No Unit wrapper let pos = Pose::translation(1.0, 2.0, 3.0);Common patterns:
Point3::origin()→Vector::ZEROVector3::x()→Vector::Xpoint.coords→ just use the vector directlyUnit::new_normalize(v)→v.normalize()Isometry3::identity()→Pose::IDENTITYisometry.translation.vector→pose.translation
Modified
- Re-export
glamxinstead ofnalgebraas the public linear algebra dependency - Migrate visual examples from
macroquadtokiss3d - Renamed
rkyv-serializefeature to justrkyv
-
0.25.305 Nov 2025 -
0.25.202 Nov 2025Release notes
Open source →- Add the
encasefeature to enable implementation ofencase::ShaderTypefor primitive shapes. - Fix regression in shape-vs-composite-shape contact calculation.
- Add the
-
0.25.117 Oct 2025Release notes
Open source →- Fix point-projection of a ball on a voxels shape containing empty chunks (e.g. after voxels removal).
- General documentation improvements.
-
0.25.003 Oct 2025Release notes
Open source →- The
Voxelsshape now uses a sparse storage internally. - Remove
Voxels::try_set_voxel. Use::set_voxelinstead. - The
Voxels::domainfunction returns values instead of references now. - Removed
Voxels::extentsandVoxels::domain_center. They can be obtained fromVoxels::local_aabb.
- The
-
0.24.005 Sep 2025Release notes
Open source →- Fixed same-machine determinism of the re-exported hashmap when building without the
enhanced-determinismfeature. - Replace all the square-root angular inertia tensors by the same tensor without taking it square root.
As a result
MassProperties::world_inv_inertia_sqrthas been renamed toworld_inv_inertia,MassProperties::inv_principal_inertia_sqrtrenamed toinv_principal_inertia. - Modified the type aliases from the
simdmodule when neither thesimd-stablenorsimd-nightlyare enabled. Without these simd features all type aliases are single-lane non-simd types (f32,f64,bool) instead of 4-lanes auto-simd types. - Moved the
SimdAabbtype behind thesimd-stableorsimd-nightlycargo feature.
- Fixed same-machine determinism of the re-exported hashmap when building without the
-
0.23.008 Aug 2025 -
0.22.108 Aug 2025Release notes
Open source →Added
- Add
Bvh::insert_with_change_detectionwhich runs an insertion unless the inserted aabb is enclosed in the existing one. This differs frominsert_or_update_partiallybecause the former will update parent AABBs so they enclose their descendants.
- Add
-
0.22.024 Jul 2025Release notes
Open source →Fixed
- Fix bug in BVH tree node removal.
- Fix bug in BVH tree building from exactly two leaves.
-
0.22.0-beta.111 Jul 2025 pre-releaseRelease notes
Open source →Fixed
- Fix invalid BVH state that could be reached after a removal resulting in a partial root.
-
0.22.0-beta.011 Jul 2025 pre-releaseRelease notes
Open source →Added
- Add a new
Bvhacceleration data-structure. It replacesQbvhentirely. It supports:- Traversals (best-first, depth-first, BVTT, leaf iterators, and leaf pairs iterator).
- It can be constructed either incrementally by inserting nodes, or from a set of leaves using either the binned building strategy or the PLOC (without parallelism) strategy.
- Dynamic leaf insertion, update, removal.
- Incremental tree rebalancing.
Fixed
- Fix
clip_aabb_linecrashing when given incorrect inputs (zero length direction or NAN). - Fix
Segment::intersects_rayreturning false-positive when the segment is zero-length. (#31). - Expose
utils::sort3andutils::sort2.
Modified
- The
local_point_cloud_aabb,point_cloud_aabb, andAabb::from_pointsnow takes an iterator over point values instead of an iterator to point references. Variants taking point references still exist and are namedlocal_point_cloud_aabb_ref,point_cloud_aabb_refandAabb::from_points_ref. - Renamed
SimdCompositeShapeandTypedSimdCompositeShapetoCompositeShapeand TypedCompositeShape`. - The
TypedCompositeShapetrait now derives fromCompositeShape. - Removed every
*Visitorstructures. Instead, either callBvh::traverse(orBvh::search_best, orBvh::leaves, orbvh::leaf_pairs), or wrap your composite shape intoCompositeShapeRefto access some generic implementation of various geometric queries for any composite shape. - All composite shapes now rely on the new
Bvhacceleration structure instead ofQbvh. - The
Qbvhhas been removed. UseBvhinstead.
- Add a new
-
0.21.123 May 2025Release notes
Open source →Added
- Add
Voxels::combine_voxel_statesto merge the voxel state of twoVoxelsshapes, updating their internal voxels state as if both shapes were part of a single one. In particular, this will prevent any internal edge that would arise at the boundaries of both shapes if they were adjacent. - Add
Voxels::propagate_voxel_changeto propagate a single-voxel modification from oneVoxelsshape to another, in order to update their internal neighborhood information as if both were part of the sameVoxelsshape.
- Add
-
0.21.016 May 2025Release notes
Open source →Added
- Add
TriMesh::cast_ray_with_cullingandTriMesh::cast_local_ray_with_cullingfor casting rays on a triangle mesh but with the possibility to prevents hits on front-faces or back-faces. - Add contact manifold calculation between two voxels shapes, or a voxels shape and compound shape.
- Add intersection check between voxels and other shapes.
- Add
MassProperties::from_voxelsto compute the mass and angular inertia tensor from a voxels shape.
Modified
- Add new variants to
TypedWorkspaceDatafor voxels-voxels and voxels-compound collision detection workspace data. - The
Voxelsshape now only support cuboids as their leaf geometries (pseudo-balls were removed).
- Add
-
0.20.205 May 2025 -
0.20.102 May 2025Release notes
Open source →Added
- Rework the
Voxelsshape API to use better method names. - Added implementations for linear and non-linear shape-casting involving
Voxelsshapes.
- Rework the
-
0.20.024 Apr 2025 withdrawnRelease notes
Open source →Added
- Added the
Voxelstype: a dedicated shape for voxel models. This is currently experimental because some features are still missing (in particular: shape-casting, mass properties, and collision-detection against non-convex shapes). - Added
SharedShape::voxels,SharedShape::voxels_from_points, and::voxelized_meshfor creating a voxels shape from grid coordinates, points, or automatic voxelization of a triangle mesh.
- Added the
-
0.19.010 Apr 2025Release notes
Open source →Added
- Derive
CopyforVHACDParameters. - Add
spadedefault feature for algorithms using Delaunay triangulation fromspade. - Add
SharedShape::from_convex_polyline_unmodifiedandConvexPolygon::from_convex_polyline_unmodifiedto initialize a polyline from a set of points assumed to be convex, and without modifying this set even if some points are collinear. - Add
TriMesh::pseudo_normals_if_orientedthat returnsSomeonly if the mesh has theTriMeshFlags::ORIENTEDflag enabled.
Modified
- The
TriMeshFlags::FIX_INTERNAL_EDGESflag no longer automatically enable theTriMeshFlags::ORIENTEDflag (but the mesh pseudo-normals will still be computed). - Improve
no_stdcompatibility.- Everything is now compatible, except
mesh_intersections,split_trimesh, convex hull validation, and computation of connected components forTriMesh. - Add the
alloc_instead_of_core,std_instead_of_alloc, andstd_instead_of_coreClippy lints to the workspace. - Use
coreandallocdirectly rather than using anstdalias. - Use
hashbrowninstead ofrustc-hashwhenenhanced-determinismis not enabled. - Make
spadeoptional.
- Everything is now compatible, except
Fix
- Derive
-
0.18.008 Jan 2025Release notes
Open source →Added
- Implement
::to_trimeshin 2d forCuboidandAabb. - Fix some edge-cases in
point_in_poly2dfor self-intersecting polygons. - Fix some edge-cases in mesh/mesh intersection that could result in degenerate triangles being generated.
Fix
Modified
- Propagate error information while creating a mesh and using functions making use of it (See #262):
TriMesh::newTriMesh::intersection_with_aabbSharedShape::trimeshSharedShape::trimesh_with_flags
point_cloud_bounding_sphereandpoint_cloud_bounding_sphere_with_centernow returns aBoundingSphere.- Removed
IntersectionCompositeShapeShapeBestFirstVisitor(which had been deprecated for a while): useIntersectionCompositeShapeShapeVisitorinstead.
- Implement
-
0.17.613 May 2025Nothing published for this version
-
0.17.506 Jan 2025Release notes
Open source →Fix
- Always compute connected-components from union-find instead of topology. It is faster and the function based on topology could result in a crash for non-manifold meshes.
-
0.17.426 Nov 2024Release notes
Open source →Added
- Add
TriMeshConnectedComponents::to_meshesand::to_mesh_buffersto easily extract individual meshes from the set of connected components. - Add
TriMesh::connected_component_meshesto get the connected components as meshes directly.
Modified
- Connected-components extraction will never fail now, and no longer require the successful calculation of the mesh’s half-edge topology.
- Add
-
0.17.319 Nov 2024Release notes
Open source →Fix
- Fix compiling with
enhanced-determinismfeature enabled.- This is now checked on CI.
- Fix compiling with
-
0.17.213 Nov 2024 withdrawnRelease notes
Open source →Added
- Implement
Shape::feature_normal_at_pointforTriMeshto retrieve the normal of a face, when passing aFeatureId::Face. - Add
convex_polygons_intersection_points_with_tolerances,convex_polygons_intersection_with_tolerances, andintersect_meshes_with_tolerancesthat let the user specify tolerances value for the collinearity check.
Fix
- Fix some robustness issues in mesh/mesh intersection when parts of both meshes overlap perfectly.
- Improve robustness of convex polygons intersections when all the vertices of one polygon are located in either the edges or vertices of the other polygon.
- Fix incorrect orientation sometimes given to the polygon output by the convex polygon intersections when one of the polygon is completely inside the other.
- Implement
-
0.17.106 Sep 2024Release notes
Open source →Modified
- Improve convergence of epa algorithm in degenerate configurations.
- Fix bug in the mesh/mesh intersection algorithm that didn’t properly take mesh transforms into account.
-
0.17.020 Jul 2024Release notes
Open source →Added
- Add
Triangle::robust_scaled_normalandTriangle::robust_normalas a more robust way to compute the triangles normal for thin triangles that generally cause numerical instabilities. - Add
Triangle::angle_closest_to_90to find the triangle’s vertex with an angle closest to 90 degree. - Add the
wavefrontfeature that enablesTriMesh::to_obj_filefor exporting a mesh as an obj file. - Add
Shape::scale_dynfor scaling a shape as a trait-object.
Modified
TypedShape::Custom(u32)is nowTypedShape::Custom(&dyn Shape).AabbSetsInterferencesCollector::tolerenceis now spelled correctly astolerance.Realis now exposed through ausestatement, so that an indirection is removed in documentation: previous occurrences ofRealnow showf32orf64.- Significantly improved the general stability of mesh/mesh intersection calculation.
- Rename
Shape::clone_boxtoShape::clone_dyn(theclone_boxmethod still exists but has been deprecated). - Make
try_convex_hullreturn an error instead of panicking if less than 3 input points are given. - Make
Triangle::normalandTriangle::scaled_normalonly available in 3D instead of panicking in 2D.
- Add
-
0.16.127 Jun 2024Release notes
Open source →Fix
- Fix occasional crash in mesh/mesh intersection if some of the vertex coordinates are very small.
-
0.16.023 Jun 2024Release notes
Open source →Fix
- Fix edge case where some of the principal angular inertia are clamped to zero for decimeter-sized objects.
- Have ball-ball shape casting take into account the
stop_on_penetrationflags. - Don’t panic in EPA for a corner case that needs some additional debugging. Show a debug log instead.
Added
- Implement concave polygons intersections:
polygons_intersection_points,polygon_intersection.
Modified
- Update
bitflagsto version ^2.3 - Update
nalgebrato 0.33. - Update
indexmapto 2.
-
0.15.108 May 2024Release notes
Open source →Fix
- Fix a regression in ball vs. convex shape contact manifold calculation.
-
0.15.005 May 2024 withdrawnRelease notes
Open source →Added
- Add
ShapeCastOptionsthat includes two new options for (linear) shape-casting.ShapeCastOptions::target_distancewhich will return a hit as soon as the moving shapes are closer than this distance; andcompute_impact_geometry_on_penetrationwhich forces the calculation of proper witness points and normals even if the shapes are initially intersecting (time_of_impact == 0.0).
Modified
This version modifies many names related to shape-casting:
- Renamed
TOItoShapeCastHit. - Renamed
TOIStatustoShapeCastStatus. - Rename
RayIntersection::toitoRayIntersection::time_of_impact. - More generally, all occurrences of the word
toihave been replaced bytime_of_impactfor better clarity. - Rename
query::time_of_impacttoquery::cast_shapes. More generally, all the functions prefixed withtime_of_impact_(e.g.time_of_impact_ball_ball) are now prefixed withcast_shapes_(e.g.cast_shapes_ball_ball). - Rename
QueryDispatcher::time_of_impacttoQueryDispatcher::cast_shapes. - The (linear) shape-casting functions like
query::cast_shapes(previously namedquery::time_of_impact) now take aShapeCastOptionsinstead of themax_toiandstop_at_penetrationarguments. - Rename
query::nonlinear_time_of_impacttoquery::cast_shapes_nonlinear. - Rename
QueryDispatcher::nonlinear_time_of_impacttoQueryDispatcher::cast_shapes_nonlinear. - Rename
NonlinearTOIModetoNonlinearShapeCastMode, andNonlinearTOIMode::DirectionalTOItoNonlinearShapeCastMode::Directional. - Rename
TimeOfImpactStatus::PenetratingtoShapeCastStatus::PenetratingOrWithinTargetDist.
- Add
-
0.14.028 Apr 2024Release notes
Open source →Modified
- Remove CUDA support to break free from the toolchain restriction required by cust.
- Rework internal edges resolution using normal cones. This implies the modification of the
SimdCompositeShape::map_part_at,TypedSimdCompositeShape::map_typed_part, andTypedSimdCompositeShape::map_untyped_parttrait functions so that the closure argument takes an extra argument for the (optional) normal constraints. This argument can be safely ignored by user code unless applying the normal collection is relevant to your use-case. - Contact manifolds will now retain all contacts (including the ones further than the specified
predictiondistance) whenever any contact is actually closer than thispredictiondistance. - Typo fix: renamed
TopologyError::BadAdjascentTrianglesOrientationtoBadAdjacentTrianglesOrientation.
Fixed
- Fix contacts between convex shapes being occasionally ignored due to some rounding errors.
- Remove crash when entering unreachable code in non-linear TOI calculation.
- Fix accuracy issue in triangle-mesh center-of-mass calculation when the mesh isn’t manifold.
Added
- Add
SdpMatrix2::inverse_and_get_determinant_unchecked. This is useful for computing the inverse in a AoSoA SIMD setting. - Add
Aabb::intersects_moving_aabbto perform a swept test between two moving aabbs.
-
0.13.825 Apr 2024Release notes
Open source →Added
- Add
Qbvh::traverse_depth_first_with_context,Qbvh::traverse_depth_first_node_with_stack_and_context, and the relatedSimdVisitorWithContexttrait to allow parent nodes to pass a custom context to its children during recursion.
- Add
-
0.13.724 Mar 2024Release notes
Open source →Modified
- The
point_in_poly2dnow handles arbitrary (convex and non-convex) polygons. The previous implementation that only supported convex polygons has been renamedpoint_in_convex_poly2d.
Fixed
- Fix a crash in
Qbvh::refitthat results from the QBVH tree becoming increasingly imbalanced.
Added
- Add
Aabb::scaled_wrt_centerto scale an AABB while keeping its center unchanged.
- The
-
0.13.624 Jan 2024Release notes
Open source →Fixed
- Fix ball-convex manifolds missing contacts in some corner cases.
- Fix panic in
TriMesh::intersection_with_plane.
-
0.13.509 Jul 2023Release notes
Open source →Fixed
- When using
rkyv, fixCheckBytesimplementation for types archived as themselves. - Fix occasional crash in the
QBVHincremental update.
- When using
-
0.13.415 Apr 2023Release notes
Open source →Fixed
- Fix
Polyline::flat_indicesthat returned an incorrectly sized slice. - Fix serialization of
SimdAabbinto map-like formats like JSON, YAML, RON.
Added
- Add validation when using
rkyvsafe API whenever applicable toparrytypes.
- Fix
-
0.13.308 Mar 2023Release notes
Open source →Modified
- Improved performance of intersection checks involving composite shapes (compound shapes, trimeshes, polylines, etc.)
-
0.13.208 Mar 2023 withdrawn -
0.13.126 Feb 2023Release notes
Open source →Fixed
- Add workaround to address jitter issue due to incorrectly empty contact manifolds generated sometimes for convex
polyhedron.
- Add workaround to address jitter issue due to incorrectly empty contact manifolds generated sometimes for convex
-
0.13.015 Jan 2023Release notes
Open source →Modified
- About
rkyvsupport: most POD structs (Aabb,Ball,Cuboid, etc.) are now archived as themselves instead of being archived as different types (for exampleAabbis archived asAabbitself instead ofArchivedAabb).
Added
- In 3D, add
transformation::try_convex_hullfor a convex hull calculation that will return an error instead of panicking on unsupported inputs.
Fixed
- Fixed duplicate faces in the connected components returned by
TriMesh::connected_components.
- About
-
0.12.109 Jan 2023Release notes
Open source →Added
- Add
TriMesh::canonical_intersection_with_planefor intersecting with planes aligned with one of the coordinate axes. - Add
TriMesh::intersection_with_planefor intersecting with arbitrary planes. - Add
TriMesh::intersection_with_local_planefor intersecting with arbitrary planes in the same space as the mesh - Add
IntersectResultas the output type for the above functions. - Add
Polyline::extract_connected_componentswhich splits a compound polyline into its connected components. - Add implementations of
bytemuck::Podandbytemuck::Zeroablefor all the simple shapes that allow it (Cuboid,Ball,Cone, etc.), and for bounding volumes (BoundingSphereandAabb).
- Add
-
0.12.011 Dec 2022Release notes
Open source →Modified
Qbvh::leaf_datanow requires&selfinstead of&mut self.- Replace the
Qbvh::leafboolean by a bitflags.
Added
- Add
Qbvh::remove,Qbvh::pre_update_or_insert,Qbvh::refit,Qbvh::rebalanceto allow modifying aQbvhwithout having to rebuild it completely. - Add
QbvhNode::is_leafto get if a node is a leaf or not. - Add
SharedShape::trimesh_with_flagsfor building a trimesh with specific pre-processing flags.
Fixed
- Fix
Triangle::contains_point.
-
0.11.130 Oct 2022Release notes
Open source →Added
- Add
SharedShape::trimesh_with_flagsfor constructing a triangle mesh with flags specified by the user.
- Add
-
0.11.030 Oct 2022Release notes
Open source →Modified
- Rename
AABBtoAabbto comply with Rust’s style guide. - Rename
QBVHtoQbvhto comply with Rust’s style guide.
Added
- Add
ConvexPolygon::offsettedto dilate a polygon. - Add
CudaTriMeshandCudaTriMeshPtrfor triangle-meshes usable with CUDA. - Add a no-std implementation of point-projection on a triangle mesh.
Fixed
- Fix ghost collisions on internal edges on flat 3D meshed and flat 3D heightfields.
- Fix pseudo-normals calculation that could generate invalid normals for triangles with some small vertex angles.
- Fix
Aabb::bounding_spherewhich returned a bounding sphere that was too big.
- Rename
-
0.10.002 Oct 2022Release notes
Open source →Modified
- Add to
query::time_of_impacta boolean argumentstop_at_penetration. If set tofalsethe linear shape-cast won’t immediately stop if the shape is penetrating another shape at its starting point and its trajectory is such that it’s existing that penetration configuration.
Added
- Add 2D
Heightfield::to_polylineto get the explicit vertices/indices of a 2D heightfield seen as a polyline. - Add the support for linear shape-cast (
query::time_of_impact) for heightfields. - Make the convex polyhedron scaling more forgiving regarding normals to avoid frequent unjustified panics.
- Fix panic happening when building a convex polyhedron with empty inputs.
- Add the support of Heightfields on CUDA kernels written in Rust using the
custcrate. - Add the
rkyv-serializefeature that enables the implementation ofrkyvserialization/deserialization for most shapes. - Add the
parallelfeature that enables methods for the parallel traversal of Qbvh trees:Qbvh::traverse_bvtt_parallel,Qbvh::traverse_bvtt_node_parallel,Qbvh::traverse_depth_first_parallel,Qbvh::traverse_depth_first_node_parallel.
Fixed
- Fix the application of non-uniform scaling to balls.
- Add to
-
0.9.030 Apr 2022Release notes
Open source →Modified
- Remove
&selfargument fromCompound::decompose_trimesh. - Switch to
cust0.3 (for partial CUDA support). - Rename
RoundShape::base_shapetoRoundShape::inner_shape.
Added
- Allow custom balancing strategies for the Qbvh construction. Some strategies are allowed to generate new leaves during the splitting process.
- Allow using point projection on heightfields from a CUDA kernel.
- Add the simultaneous traversal of two Qbvhs.
- Add computation of
MassPropertiesfor aTriMesh. - Add
.to_outlinemethods to compute the outline of a 3D shape (useful for debug-rendering). - Add method to apply a scaling factor to some shapes. Shapes not supporting non-uniform scaling (like balls) will return a convex approximation of the scaled result.
- Add methods to split (into up to two parts) a Cuboid, Segment, or TriMesh with an axis-aligned plane.
- Add the computation of the intersection mesh between two TriMesh, or between a Cuboid and a TriMesh.
- Remove
-
0.8.002 Jan 2022Release notes
Open source →Modified
- Until now, the orientation of the polygon computed by 2D convex hull
computation
parry2d::transformation::convex_hullandparry2d::transformation::convex_hull_idxwasn't specified (and was generally in clockwise order). Now, this orientation is explicitly specified in the documentation and is set to counter-clockwise order (which is coherent with orientation expected by, e.g., theConvexPolygontype).
Added
- Add
parry::utils::obbwhich computes a (possibly sub-optimal) OBB for a set of points. - Add
Polyline::project_local_point_assuming_solid_interior_ccwwhich projects a point on the polyline contour, and is able to detect if that points is located inside of the polyline, assuming that the polyline is closed and oriented counter-clock-wise. - Add (3D only)
TriMesh::compute_pseudo_normals. If this is called, and if the trimesh respects some constraints ( oriented with outward normals, manifold almost everywhere, etc.) any subsequent point queries with thesolidargument set totruewill properly set thePointProjection::is_insideto true when the point lies in the interior of the trimesh. - Added the implementation of the ear-clipping and Hertel-Mehlhorn algorithm that can be used for 2D triangulation and convex decomposition.
- Add the ability to use a subset of Parry’s features in a
no-stdcontext. If the newcudacargo feature of Parry is enabled, all features compatible withno-stdcan be used inside of a CUDA kernel written in Rust thanks to the rust-cuda ecosystem.
Fixed
- Fix the orientation of the polygons generated by the 2D convex polygon decomposition (they are now always oriented
counter-clockwise as expected by the
ConvexPolygontype). - Fix the intersection test between a 2D ball and a 2D compound shape.
- Until now, the orientation of the polygon computed by 2D convex hull
computation
-
0.7.112 Sep 2021 -
0.7.008 Aug 2021Release notes
Open source →Modified
- Update the codebase to use
nalgebra v0.29.
Fixed
- Fix a bug where the normal returned by ray-casting on polylines would not be normalized.
- Update the codebase to use
-
0.6.011 Jul 2021Release notes
Open source →Added
- Implement
Debug, Clone, PartialEqforVHACDParameters. - Add a method to reverse the order of a polyline.
- Add a method to remove duplicate vertices form a
TriMesh(and adjusting the index buffer accordingly). - Add a method to iterate through all the lean data stored by a Qbvh.
- Implement the Interval Newton Method for computing all the roots of a non-linear scalar function.
- Implement the intersection test between a spiral and an Aabb.
Modified
- Rename all occurrences of
quadtreetoqbvh. Using the termquadtreewas not representative of the actual acceleration structure being used (which is a BVH).
- Implement
-
0.5.104 Jun 2021Release notes
Open source →Fixed
- Fix a bug where
query::contactwould returnNonefor a all intersecting a cuboid in such a way that one of the cuboid's vertices coincides exactly with the ball's center.
- Fix a bug where
-
0.5.002 Jun 2021Release notes
Open source →Modified
- Updated all dependencies to their latest version.
Fixed
- Fix ray-casting against solid triangles.
- Fix NaN when adding mass-properties with a zero mass.