npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

massiv-3d

v0.0.19

Published

a simple high performance webgl library

Downloads

31

Readme

massiv-3d

a utility first, ecs based, engine to create animations, simulations and games

goal

every abstraction comes with a cost in runtime-performance and memory-allocation. the goal of this project is not to abstract away the rendering pipeline, but to give you useful utilities to create high-performance renderings for your animations, simulations and games and by reducing the boilerplate code.

the ecs system

this project uses a very basic implementation of an ecs system, but it does not follow the strict definition where i think it results in more complex code or bad performance.

actually working, but not very useful code to get an idea of the ecs system:

const world = new World();

// in its most basic form, a component is just a object with type and data property
const createPosition = (x: number, y: number, z: number) => {
    return { type: 'Position', data: [x, y, z] };
};

// a entity is something that has an identity in your world
// all of the data that describes the entity is defined by its components
const player = new Entity('Player', [
    createPosition(0, 0, 0)
]);

// a system is just a function that will get called every time
// you call world.update()
const consoleRenderSystem = () => {
    const entitiesWithPosition = world.queryEntities(['Position']);
    console.log(`count of entities with a position component: ${entitiesWithPosition.length}`);
};

world.addSystem(consoleRenderSystem);
world.addEntity(player);

// typically you call world.update() inside of the requestAnimationFrame callback
const tick = (time: number) => {
    world.update(time);
    window.requestAnimationFrame(tick);
};

window.requestAnimationFrame(tick);

some useful information about the custom ecs implementation:

  • the name of an Entity must be unique in one World
  • a Entity can only have 1 Component of any given type

Important Info

this project is work in progress. It does not export a set of components or systems that work out of the box. I havent found the right abstraction until now, because different projects have different requirements, and i found myself always writing systems from scratch to improve on performance, memory-usage and multi-threading for a given project. Once i find Components or Systems that may be used across different projects, i will add it to the export of this library. Some Components and Systems that are planned to be exported very soon are:

  • Components
    • Geometry
    • Transform
    • PerspectiveCamera
    • OrthographicCamera
  • Systems
    • FirstPersonCameraMovementSystem
    • OrbitCameraMovementSystem

Examples

the examples folder holds basic, but also more complex components and systems, that shows a possible usage of the library in more depth. the quick start guide is:

  1. clone this repo
  2. npm i
  3. npm run example:XX where XX stands for: example:01, example:02, ...

try the examples in order to get a better idea of the library and the concepts itself