- Notifications
You must be signed in to change notification settings - Fork10
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
preUnload
to export the internal global state - After reloading the shared library, call
postReload
to 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.