Giter Site home page Giter Site logo

babylon_runtime's Introduction

_r

_r is a lightweight, "write less, do more", BabylonJS library. The purpose of _r is to make it much easier to use and maintain in the 3D workflow.

_r takes a lot of common tasks that require many lines of JavaScript code to accomplish, and wraps them into methods that you can call with a single line of code. _r also simplifies a lot of the 'complicated' things from BabylonJS.

A brief look

For 3D Designers - No more developpers

From a 3D designers point of view there are always a lot of parameters - colors, channels intensities, reflection, refraction, etc - which needs to be customised by code. Code is great but it’s hard to understand and maintain for a 3D designers team (they always need developpers and some of them are...)

With _r you can use patch file to customise the scene. Patch are very easy to read/write text files that don't required any programming skills.

 [
    {
        "scene":
        {
            "ambientColor": "#ffffff",
            "clearColor": "#9CC1CE"
        }
    },
    {
        "cameraFree.000":
        {
            "speed": 0.05,
            "fov": 1.1,
            "position":
            {
                "x": 2.72,
                "z": -1.91
            },
            "rotation":
            {
                "x": 0.11,
                "y": -0.43
            }
        }
    }
]

read more about patches.

For 3D Scripters - Easy animations and events

_r has been inspired by the jQuery API so scripting animations and managing events is very similar to jQuery :

_r("sphere3").on("OnPickTrigger", function() {
    console.log("click on " + this.name)
});


_r("sphere1, sphere2").animate({
  position : { y : 3},
  rotation : { y : 1}
}, {
  duration : 2, 
  easing : 'easeOutSine', 
  loop : true 
});

_r has a lot of other usefull features for scripters, read more about scripting.

For 3D Developpers

Developpers can create plugins and new patch's directives for 3D designers and scripters.

Plugin

_r.fn.hotspotPlugin = function(message) {
    return this.each(function(element) {
        _r(element).on('OnPickTrigger', function() {
            alert(message)
        })
    })
}

Then scripter can use :

_r("mesh1, mesh2").hostpotPlugin("yo");
_r("mesh3").hotspotPlugin("yeah");

Directive

We can then make this plugin available in patch :

_r.override( ["hotspotPlugin"],
    function(target, source, property) {
        var message = source[property];
        _r(target).hotspotPlugin(message);
 });

So designers can use :

 [
    {
        "mesh1, mesh2":
        {
            "hotspotPlugin": "yo"
        }
    },
    {
        "mesh3":
        {
            "hotspotPlugin": "yeah"
        }
    }
]

read more about plugins & directives

babylon_runtime's People

Contributors

fabsharp avatar vinc3r avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

babylon_runtime's Issues

Accessing to a texture which doesn't exist stop loading

Example: if a bumpTexture is not assigned on the material, this patch will crash the loading (and doesn't give useful infos in the browser console)

[
    {
        "*default*:material":
        {
            "ambientColor": "red",
            "bumpTexture":
            {
                "level": 1
            }
        }
    }
]

Camera move event

Something like:

_r.on(_r.scene.activeCamera, 'move', () => { console.log('moved !!!'); });

And maybe an option to set if it's for:

  • position only
  • rotation only
  • both (default)

_r.on(_r.scene.activeCamera, 'move', () => { console.log('moved !!!'); }, "ROTATION_ONLY");

"ghost" animation value

on line 3510 we had to add this line element.animations.splice(element.animations.indexOf(animation), 1); to avoid kind of ghost animation playing
for example camera fov is animated through a hotspot, then user interact on another thing in the scene, using an another kind of animate: fov is animated too!

[patches] _r.patch(arrayOfUrlPatches);

Preload patches in function _r.patch (or a specific function like: _r.patchFromFiles)
Example:
_r.patchFromFiles([ "patches/materials.patch", "patches/meshes.patch" ])

[library] download / load / show / hide / dispose

download: download library without loading it in the scene
load: load library in the scene
show: show library in the scene
hide: hide library in the scene
dispose: dispose library mesh + material with option disposeMaterialAndTextures true/false

easing property: linear

linear seems to be the default value when no easing is set, but when user write

{
    "easing": "linear"
}

a warning message says linear is not recognize

match function

_r.match(meshName, selector);

For example:

if(_r.match(mesh.name, '*hotspot*:mesh')){ //ok }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.