saharan / oimophysics Goto Github PK
View Code? Open in Web Editor NEWA cross-platform 3D physics engine
License: MIT License
A cross-platform 3D physics engine
License: MIT License
i use oimo couldn't find the vehicle, related impostors, joints, motors and integration with other frameworks
https://github.com/armory3d/armory/blob/main/Sources/armory/trait/VehicleBody.hx
With Babylon.js and oimo physic engine, In order to move a player, i use a box and a wheel (motor) with a hinge joint.
But is it possible to add an other contrainst for restrincting the rotations (only Y) so that the player doesn't fall over and stays straight?
I did a playground: https://www.babylonjs-playground.com/#CRMQZP#6
How do we render the DebugDraw in Haxe?
I've created the debug draw, set the world debug draw to this.
Now how do we actually display it?
Currently using: OpenFL->Away3D->Oimo
oimophysics 1.2.2: https://www.npmjs.com/package/oimophysics/v/1.2.2
My example (see source below) works with Parcel but does not work with Browserify.
Error log:
`
E:_Projects\Physics\oimo\oimo-debug-drawer-webgl-ts>npm run release
[email protected] release E:_Projects\Physics\oimo\oimo-debug-drawer-webgl-ts
npm run compile && npm run bundle && npm run uglify
[email protected] compile E:_Projects\Physics\oimo\oimo-debug-drawer-webgl-ts
tsc -p tsconfigs/tsconfig.release.json
[email protected] bundle E:_Projects\Physics\oimo\oimo-debug-drawer-webgl-ts
browserify public/js/main.js -o public/js/bundle.js
SyntaxError: 'import' and 'export' may appear only with 'sourceType: module' (54881:0) while parsing E:_Projects\node_modules\oimophysics\OimoPhysics.js while parsing file: E:_Projects\node_modules\oimophysics\OimoPhysics.js
at DestroyableTransform.end [as _flush] (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\insert-module-globals\index.js:114:21)
at DestroyableTransform.prefinish (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_transform.js:138:10)
at DestroyableTransform.emit (events.js:400:28)
at prefinish (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_writable.js:619:14)
at finishMaybe (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_writable.js:627:5)
at endWritable (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_writable.js:638:3)
at DestroyableTransform.Writable.end (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_writable.js:594:41)
at DestroyableTransform.onend (C:\Users\8Observer8\AppData\Roaming\npm\node_modules\browserify\node_modules\readable-stream\lib_stream_readable.js:577:10)
at Object.onceWrapper (events.js:519:28)
at DestroyableTransform.emit (events.js:412:35)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] bundle: browserify public/js/main.js -o public/js/bundle.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] bundle script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\8Observer8\AppData\Roaming\npm-cache_logs\2022-09-16T11_33_02_421Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] release: npm run compile && npm run bundle && npm run uglify
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] release script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\8Observer8\AppData\Roaming\npm-cache_logs\2022-09-16T11_33_02_563Z-debug.log
E:_Projects\Physics\oimo\oimo-debug-drawer-webgl-ts>
`
Example. Browserify, UglifyJS, TypeScript were installed globally.
Project structure:
Command to build for release: npm run release
package.json
{
"name": "oimo-debug-drawer-webgl-ts",
"version": "1.0.0",
"description": "",
"main": "public/js/bundle.js",
"targets": {
"main": {
"includeNodeModules": true
}
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"del_files": "del /f /q /s .\\public\\js\\*.*",
"dev": "npm run del_files && parcel watch src/main.ts",
"compile": "tsc -p tsconfigs/tsconfig.release.json",
"bundle": "browserify public/js/main.js -o public/js/bundle.js",
"uglify": "uglifyjs public/js/bundle.js -o public/js/bundle.js",
"release": "npm run compile && npm run bundle && npm run uglify"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"oimophysics": "^1.2.2"
}
}
tsconfigs/tsconfig.release.json
{
"compilerOptions": {
"target": "ES5",
"outDir": "../public/js",
"sourceMap": false,
"types": [
"node"
],
"allowSyntheticDefaultImports": true,
"esModuleInterop": true
},
"include": [
"../src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
src/main.ts
import { oimo } from "oimophysics";
const oimoWorld = new oimo.dynamics.World();
oimoWorld.setGravity(new oimo.common.Vec3(0, -9.8, 0));
console.log(oimoWorld.getGravity());
public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script type="module" src="js/bundle.js"></script>
</body>
</html>
public/js/main.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var oimophysics_1 = require("oimophysics");
var oimoWorld = new oimophysics_1.oimo.dynamics.World();
oimoWorld.setGravity(new oimophysics_1.oimo.common.Vec3(0, -9.8, 0));
console.log(oimoWorld.getGravity());
Hello, I've seen some copies of OimoPhysics floating around, not sure which one is the best one for me to use, as I do not know how to use externs that well, but I've noticed a difference in ConeGeometry.hx
override public function _updateMass():Void {
var r2:Float = _radius * _radius;
var h2:Float = _halfHeight * _halfHeight * 4;
_volume = MathUtil.PI * r2 * _halfHeight * 2 / 3;
M.mat3_diagonal(_inertiaCoeff,
1 / 20 * (3 * r2 + 2 * h2),
3 / 10 * r2,
1 / 12 * (3 * r2 + 2 * h2)
);
}
```
Where it says 1 / 12, I've seen a different version showing 1 / 20.
So alt version:
1 / 20
3 / 10
1 / 20
Hello!
Is it possible to step a single rigid body?
For example I have a dozen dynamic rigid bodies and a dozen static bodies, I would like to retain the velocity and position on all dynamic bodies while stepping and updating the position/velocities of a single rigid body x number of times.
Can I do this? I've considered sleeping all bodies except the one I want to update but I don't think that would retain the velocities?
Thanks!
https://jsfiddle.net/ssktkr/qmsctw51/
If you move the coordinates of the shape from the center of RigidBody and add it, it will move like a pendulum.
Is it being used incorrectly?
Shapeの座標をRigidBodyの中心からずらしてaddすると振り子のような動きになってしまいます。
使い方が間違っていますか?
Hi, @saharan. Please, upload a new version (v1.2.3) to NPM. The latest version of OimoPysics (v1.2.3) was released on January 29, 2022, but it was not uploaded to NPM. v1.2.2 was published 3 years ago.
What would interest me is to be able to run OimoPhysics with NodeJS on the server side, and not just only on the client side (browser). There is already a module for NodeJS (https://github.com/lo-th/Oimo.js/) but it is out of date, so it isn't interesting. It is best to be synchronized with the original project.
I don't know Haxe at all but i see that there is a library to create modules for NodeJS: https://github.com/HaxeFoundation/hxnodejs
So, i guess is possible to generate a module for NodeJS.
On Linux, i cloned OimoPhysics github, installed Haxe and hxnodejs. But i don't know how to compile/export OimoPhysics from the sources.
If i check the hxnodejs documentation, is like this line:
haxe -lib hxnodejs -main Main -js main.js
But i don't see any "main" in the OimoPhysics sources.
Not really a technical issue as such, but I was wondering if there were any 'getting started' type tutorials for this library?
Is it possible to have bodies that do "collide" but have no collision response.
I currently implemented it with an aabb test between all bodies vs. a specific collision group
(my trigger group, which is masked for collision)
But that does obviously not allow for trigger to dectect other rb's than a aligned boxes.
I was going through the implementation of detection but i could not find a possibility to have a collision detection but no collision response, besides a callback.
Is there anything planed, or there that i did not see? Is the engine still in active development? Because i really like the very clear structure.
Simply create a World instance with latest version and haxe 4.0.0-rc.1, tried target cpp, python and js.
package com.test.oimo;
import oimo.dynamics.World;
class TestOimo {
var world:World;
static function main(){
world = new World();
}
}
src/oimo/m/B.hx:181: lines 181-187 : error: { type : haxe.macro.ComplexType, name : String, expr : Null<haxe.macro.Expr> } has no field isFinal
src/oimo/m/B.hx:181: lines 181-187 : have: Array<{ type, name, expr }>
src/oimo/m/B.hx:181: lines 181-187 : want: Array<haxe.macro.Var>
src/oimo/m/B.hx:181: lines 181-187 : For function argument 'a'
src/oimo/collision/geometry/Geometry.hx:12: characters 1-8 : Build failure
Hi, can you make workable version of engine for haxe.
can be cool to add
public inline function getSleeping():Bool{
return _sleeping;
}
to rigidBody because _sleeping is rename on compile
I want to use/integrate OimoPhysics within a certain typescript game engine, but i have some difficulties using it properly.
I want to use the type definition file so as i see it i have to use the javascript module export of OimoPhysics. But if i use it that way i either get errors like "unexpected token 'export'" from the last line of the OimoPhysics.js or if i import it as type="module" i get no errors but i can only run it on a server but it does nothing.
If i use the standard OimoPhysics.min.js and use window.OIMO instead of importing it. I can use Oimo and test it and i really like it. But in that case i have no Type Definitions.
I would appreciate every help. I tried many things revolving around typescript modules but it might be a specific thing with OimoPhysics since the Typedefintion part seems quite recent.
Request: an extra parameter to control how many sides the Cone Geometry has, is there already a way to do this?
Hi, would it be complicated to integrate continious collision detection for certain bodies? Bodies with high speed slips through each other, i managed to resolve this problem with multiple world.step call each frame but this highly impacts performance. And one more question, are there any plans with terrain geometry?
public function removeShape(shape:Shape):Void {
// first, remove the shape from the linked list so that it will be ignored
M.list_remove(_shapeList, _shapeListLast, _prev, _next, shape);
_numShapes--;
shape._rigidBody = null;
// then remove the shape from the world
if (_world != null) {
_world._removeShape(shape);
}
_shapeModified();
}
Should shape._rigidBody = null go (after) before _shapeModified();?
As _world.removeShape(shape); requires shape._rigidBody(NULL)._contactLinkList
If I apply a force with applyImpulse or linearVelocity to x on an object, it moves relative to the global coordinates. I would like it to move relative to its local coordinates (so depending on its rotation).
How to do?
Compiling to native platforms leads to errors, 100$ for fix!
It seems possible that min1, min2, min1V and min2V sometimes aren't being set (and remain null), leading to the error mentioned in the title.
This seems to happen during BoxBoxDetector. Spheres and Boxes appear to collide just fine.
TypeError Cannot read property 'x' of null oimo_collision_narrowphase_detector__$BoxBoxDetector_FaceClipper.reduce https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:156619 oimo_collision_narrowphase_detector_BoxBoxDetector.detectImpl https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:145380 oimo_collision_narrowphase_detector_BoxBoxDetector.detect https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:122639 oimo_dynamics_Contact._updateManifold https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:374223 oimo_dynamics_World._updateContacts https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:416406 oimo_dynamics_World.step https://j4k75.csb.app/node_modules/oimophysics/OimoPhysics.js:1:615737
Hello. I will describe my steps. Please, write what step is wrong.
I created a new folder and the package.json
file using this command:
npm init -y
I installed the engine:
npm i saharan/OimoPhysics
I added "type": "module"
to the package.json
file:
{
"name": "oimophysics-server-js",
"version": "1.0.0",
"description": "",
"type": "module",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"oimophysics": "github:saharan/OimoPhysics"
}
}
I created the src/server/app.js
file:
import "oimophysics";
const world = new OIMO.World();
world.gravity = new OIMO.Vec3(0, -9.8, 0);
console.log(world.gravity);
I tried to run app.js
with nodemon src/server/app.js
but I had this error:
const world = new OIMO.World();
^
ReferenceError: OIMO is not defined
I'm attempting to build the demos as per the instructions in the project Readme.
I've installed Haxe Compiler 4.0.0-preview and from the demos folder I've run haxe -cp src -main demo.js.DemoJS -js index.js
. It returns the following error:
src/demo/common/DemoBase.hx:4: characters 8-24 : Type not found : oimo.common.Mat4
I'm new to Haxe so might be missing something obvious. Any help would be appreciated!
こんにちわsaharanさん、はじめまして。OimoPhysics.haxeとしてOimoPhysicsをforkしたtor4kichiと言います。よろしくお願いします。
RigidBodyのスリープ解除条件の記述についてです。
https://github.com/saharan/OimoPhysics/blob/master/src/com/element/oimo/physics/dynamics/World.as
問題の箇所
World.as / function step / line 384~385
var lv:Vec3 = tmpB.linearVelocity;
var av:Vec3 = tmpB.linearVelocity;
とありますが、これは
var lv:Vec3 = tmpB.linearVelocity;
var av:Vec3 = tmpB.angularVelocity;
と書こうとされていたのではないでしょうか?
Hello!
I got a sphere, a box and a cylinder. I want that when my sphere rolls on the box but when it touches the cylinder, the sphere falls.
I update collisionGroup/collisionMask when I have a contact between the sphere and the cylinder, but it continues collide with the cylinder and with my box.
Sample code
// Collision Group
var CollisionGroup = {
FLOOR: 1,
SPHERE: 2,
SPHERE_OUT: 4,
BOX: 8,
CYLINDER: 16
}
// Sphere
sphereShape.addCollisionGroup( CollisionGroup.SPHERE );
sphereShape.addCollisionMask( CollisionGroup.FLOOR );
// Box
boxShape.addCollisionGroup( CollisionGroup.BOX );
boxShape.addCollisionMask( CollisionGroup.BALL );
// Cylinder
cylinderShape.addCollisionGroup( CollisionGroup.CYLINDER );
cylinderShape.addCollisionMask( CollisionGroup.SPHERE );
// Functions
function addSphere( sphere ) {
sphereShape.setCollisionGroup( CollisionGroup.SPHERE );
sphereShape.setCollisionMask( sphereShape.getCollisionMask() | CollisionGroup.CYLINDER | CollisionGroup.BOX );
}
function removeSphere( sphere ) {
sphereShape.setCollisionGroup( CollisionGroup.SPHERE_OUT );
sphereShape.setCollisionMask( CollisionGroup.FLOOR );
}
I have update to Haxe 4.0.0 preview-1, do you have idea this error when compiling?
I'm trying to change gravity. world.gravity
changes, but does not affect the gravity of the world. I even change the sign, but result is the same: https://playcode.io/1189009 (another playground: https://plnkr.co/edit/pPrpB8rorficnBOE)
It's for world.gravity = new OIMO.Vec3(0, -10, 0);
oimo_common_Vec3 {x: 0, y: -10, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9974894976, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9924684928000005, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9849369856, z: 0}
oimo_common_Vec3 {x: 0, y: 4.974894976, z: 0}
oimo_common_Vec3 {x: 0, y: 4.962342464, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9472794496, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9297059328, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9096219136000006, z: 0}
oimo_common_Vec3 {x: 0, y: 4.887027392, z: 0}
oimo_common_Vec3 {x: 0, y: 4.861922368, z: 0}
It's for world.gravity = new OIMO.Vec3(0, 10, 0);
oimo_common_Vec3 {x: 0, y: 10, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9974894976, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9924684928000005, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9849369856, z: 0}
oimo_common_Vec3 {x: 0, y: 4.974894976, z: 0}
oimo_common_Vec3 {x: 0, y: 4.962342464, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9472794496, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9297059328, z: 0}
oimo_common_Vec3 {x: 0, y: 4.9096219136000006, z: 0}
oimo_common_Vec3 {x: 0, y: 4.887027392, z: 0}
oimo_common_Vec3 {x: 0, y: 4.861922368, z: 0}
How can i change the size of the Shape at runtime? E.g. i have a capsule and want to change the height.
There is no option to do so, only setPosition/setOrientation and such for the RigidBody itself.
I'm implementing OimoPhysics into a game engine and user need to change the Shape at runtime after it's initially created. Currently i have to recreate the whole RB when they do so, which brings it's own set of problems.
When i try to RigidBody.removeShape and then addShape the newly scaled one oimo breaks because it shortly did not have a shape i guess?
Need help. I basically need similar functionality to e.g. Unity's collider where i can change the Shape in an editor through fields/sliders.
Oimophysics uses Inertia about center of shape at (0,H/2,0) assuming origin at center of base of shape.
While calculating Inertia of body, parallel axis theorem is used but I think cone geometry should be treated differently as its center of mass lies at (0,H/4,0) rather than (0,H/2,0).
Correct me If I misunderstood your method of calculating inertia tensor.
that apparently causing various problems on build
related to #34
just giving callbacks with no physical affection
Hi!
First of all, awesome project! Congratulations!
I'm trying to use your library in a small fps like project... I'm using the available javascript binary...
I'm trying to move a simple dynamic rigid body in a place with static rigid bodies...
But I can't get the dynamic body to move applying impulses or forces...
So I tried to move using the setPosition method of the rigid body. It works, but seems like the gravity stops acting on the body after this...
What am I doing wrong?
The following code I use on main character class:
class Character {
constructor(px, py, pz){
this.body_cnf = new OIMO.RigidBodyConfig();
this.body_cnf.type= OIMO.RigidBodyType.DYNAMIC;
this.body_cnf.position = new OIMO.Vec3(px, py, pz);
this.body = new OIMO.RigidBody(this.body_cnf);
this.shape_cnf = new OIMO.ShapeConfig();
this.shape_cnf.geometry = new OIMO.CylinderGeometry(0.5,1.0);
this.shape_cnf.density=70.0;
this.shape_cnf.position=new OIMO.Vec3(px,py,pz);
this.body.addShape(new OIMO.Shape(this.shape_cnf ));
world.addRigidBody(this.body);
}
moveFront(){
this.body.applyImpulse(new OIMO.Vec3(0,0,1), this.body.getPosition());
//Also tried
//this.body.applyForce(new OIMO.Vec3(0,0,1), this.body.getPosition());
}
moveBack(){
this.body.applyImpulse(new OIMO.Vec3(0,0,-1), this.body.getPosition());
//Also tried
//this.body.applyForce(new OIMO.Vec3(0,0,-1), this.body.getPosition());
}
}
Thanks!
I would like to use this library to compile to native android via lime, yet I've found the code is riddled with build macros to turn it into a JavaScript file.
Can I use this library directly in a Haxe project? Thanks.
Hi Saharan,
A great option for raycast is add a mask if possible
world.rayCast( begin, end, callback, mask = 1 )
to pass through object
How to rotate a rigid body around a point or any axis, and around three-quarters of the body, rather than around the center
Hi @saharan
Thank you for your wonderful physics library - it is awesome! I would like to know if you are planning to add terrain-shape support. If you were not already planning it, may I request that this feature be added?
I have some ideas for games that require basic shape (sphere and box) colliding with triangles in a terrain. If you can't do the full terrain class, would you at least consider doing a sphere-triangle and box-triangle collision routine? Then we could add the terrain shape or triangle-mesh class on our own.
Again,thanks for the great library!
-Erich
Hi! Thanks for the wonderful physics engine!
I got a question: if I want to lock a specific axis of an object, in bullet I can use setLinearFactor() and set that axis to 0.0. In Oimo I found that there is setRotationFactor() for rotation, but I didn't find the equivalent for location. May I know what is the best way to achieve this?
Regards
Milo
Hello! OimoPhysics is wonderful and fast.
I have a problem that I dont know how to get the RigidBody rotation(XYZ).
The rotation is A Mat33.
Thanks.
RigidBody.getNumContectLinks
should be RigidBody.getNumContactLinks
(#38)
OimoPhysics/build.hxml:
--class-path demos/src/
--class-path src/
--main demo.js.DemoJS
--js demo.js
Terminal output:
haxe build.hxml
src/oimo/m/B.hx:181: lines 181-187 : error: { type : haxe.macro.ComplexType, name : String, expr : Null<haxe.macro.Expr> } has no field isFinal
src/oimo/m/B.hx:181: lines 181-187 : ... have: Array<{ type, name, expr }>
src/oimo/m/B.hx:181: lines 181-187 : ... want: Array<haxe.macro.Var>
src/oimo/m/B.hx:181: lines 181-187 : ... For function argument 'a'
src/oimo/collision/broadphase/Proxy.hx:11: characters 1-8 : Build failure
However, it does work if I use the Armory3D fork as suggested in #22.
Hello,
I was wondering what kind of events i can use when collision is detected? I have looked through the code but couldn't find one that I can use, maybe I have overlooked something? I need some sort of collision event notification to make a game out of it.
By the way, It's a wonderful library Thank You :)
What materials did you use to develop the physics engine
related to #27
RigidBody
should store the local position of the center of gravity so that the mass data will automatically be updated when shapes are added/removed.
Since v1.2.4
(e8dd122) the JavaScript module has been throwing this error with a missing global for HxOverrides
.
Building the JavaScript module does generate the following:
class HxOverrides {
static now() {
return Date.now();
}
}
However with your instructions to "Remove all lines before var oimo = oimo || {};
", that HxOverrides
class is removed, but the code is still referencing it.
The previous version was just using Date.now()
, and the other JavaScript files in bin/js/ include the HxOverrides
class.
So not sure if they're supposed to include HxOverrides
or not. 🤷♂️
i see error in getRotationalSpringDampers of GenericJoint
return _translSds.toArray();
should be
return _rotSds.toArray();
Hi,
Does this new version have a torsional spring (that can restore direction in all axes elastically, by applying torque), or do you know how to apply a force like that?
https://en.wikipedia.org/wiki/Torsion_spring
Thanks!
Hi. I've noticed the API documentation includes type info. I've only recently become aware of Haxe, so I don't know if that type info is part of the language or not, but would it be feasible to generate TypeScript type declarations from it when building to javascript? If not, I'm inclined to try and write some manually. In case you aren't familiar:
https://www.typescriptlang.org/docs/handbook/declaration-files/by-example.html#classes
I just recently integrated this library into a project, before realizing it doesn't have support for heightmaps. I tried hacking something together using convex hulls, but any version of it was either too slow or too imprecise.
Are there any plans to implement heightmap collision detection? Otherwise I'm afraid I'll have to switch to something different :(
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.