- Notifications
You must be signed in to change notification settings - Fork13
Zig build package, bindings and C API (JoltC) forhttps://github.com/jrouwe/JoltPhysics
License
zig-gamedev/zphysics
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Zig build package, bindings andC API forJolt Physics.
For a simple sample applications please seehere.
Examplebuild.zig:
pubfnbuild(b:*std.Build)void {constexe=b.addExecutable(.{... });constzphysics=b.dependency("zphysics", .{ .use_double_precision=false, .enable_cross_platform_determinism=true, });exe.root_module.addImport("zphysics",zphysics.module("root"));exe.linkLibrary(zphysics.artifact("joltc"));}
Now in your code you may import and usezphysics:
constzphy=@import("zphysics");pubfnmain()!void {tryzphy.init(allocator, .{});deferzphy.deinit();// Create physics systemconstphysics_system=tryzphy.PhysicsSystem.create(...// layer interfaces - please see sample application .{ .max_bodies=1024, .num_body_mutexes=0, .max_body_pairs=1024, .max_contact_constraints=1024, }, );deferphysics_system.destroy();// Create shapeconstbody_interface=physics_system.getBodyInterfaceMut();constshape_settings=tryzphy.BoxShapeSettings.create(.{1.0,1.0,1.0 });defershape_settings.release();constshape=tryshape_settings.createShape();defershape.release();// Create bodyconstbody_id=trybody_interface.createAndAddBody(.{ .position= .{0.0,-1.0,0.0,1.0 }, .rotation= .{0.0,0.0,0.0,1.0 }, .shape=shape, .motion_type=.dynamic, .object_layer=object_layers.non_moving, },.activate);deferbody_interface.removeAndDestroyBody(body_id);physics_system.optimizeBroadPhase();// Perform ray cast {constquery=physics_system.getNarrowPhaseQuery();varresult=query.castRay(.{ .origin= .{0,10,0,1 }, .direction= .{0,-20,0,0 } }, .{});if (result.has_hit) {// result.hit.body_id// result.hit.fraction// result.hit.sub_shape_id... } }// Main loopwhile (...) {physics_system.update(1.0/60.0, .{});// Draw all bodiesconstbodies=physics_system.getBodiesUnsafe();for (bodies)|body| {if (!zphy.isValidBodyPointer(body))continue;constobject_to_world=object_to_world: {constposition=zm.loadArr4(body.position);constrotation=zm.loadArr4(body.rotation);varxform=zm.matFromQuat(rotation);xform[3]=position;xform[3][3]=1.0;break :object_to_worldxform; };// Issue a draw call... } }}
Thejoltc artifact can be built as a shared library by specifying theshared build option:
const zphysics = b.dependency("zphysics", .{ .shared = true, });If your zig module useszphysics and is itself part of a shared library that is reloaded at runtime, then some additional steps are required:
- Before unloading the shared library, call
preUnloadto export the internal global state - After reloading the shared library, call
postReloadto import the internal state and update allocator vtables
If you useregisterTrace orregisterAssertFailed, these must also be called again to update their function pointers.
About
Zig build package, bindings and C API (JoltC) forhttps://github.com/jrouwe/JoltPhysics
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors6
Uh oh!
There was an error while loading.Please reload this page.