Alexander Buzin c1d7c5c4ee Vrkit examples
Former-commit-id: 70546d334f56f2cbb3d3c40be53f3528b785f8ba
2017-06-16 23:00:36 +03:00
2017-03-24 19:02:09 +02:00
2017-06-09 11:48:12 +03:00
2017-06-16 23:00:36 +03:00
2017-06-01 17:57:43 +03:00
2017-06-16 23:00:36 +03:00
2017-06-09 11:48:12 +03:00
2017-02-07 00:47:19 +02:00
2017-01-30 15:07:06 +02:00
2016-11-08 17:05:28 +09:00
2017-01-18 00:09:40 +02:00
2017-03-05 16:13:41 +02:00
2016-10-28 19:38:25 +03:00
2017-03-11 18:43:37 +02:00
2016-11-08 11:09:55 +02:00
2017-01-28 01:02:11 +02:00
2017-06-09 11:48:12 +03:00
2017-06-07 18:48:35 +07:00
2017-06-01 17:57:43 +03:00
2017-03-24 18:08:38 +02:00

XO code style Three NPM Version Build Status PRs Welcome Coverage Status Known Vulnerabilities Discord

OpenCollective Backers OpenCollective Sponsors

Framework for developing 3D web apps

Contributors welcome! :P How to start contributing

Development chat - opens in discord app. Ask for help here;)

Support the project - [Donate] buy developers a

$ npm install --save whs

Showcases

You can find lots of examples at showcases.

basic/helloworld basic/model softbody/cloth3 postprocessing/basic-glitch softbody/ropes design/saturn

Why?

  • 🤔 Because making of even a basic Three.js application requires at least ~20 lines of code (see this tutorial)

    • Three.js: you will need to setup: scene, renderer, camera, make an animate() function before making the actual app.

    • Whitestorm.js: There are modules that helps you easily setup them:

      const app = new WHS.App([
        new WHS.ElementModule(), // attach to DOM
        new WHS.SceneModule(), // creates THREE.Scene instance
        new WHS.CameraModule(), // creates PerspectiveCamera instance
        new WHS.RenderingModule() // creates WebGLRenderer instance
      ]);
      
      app.start(); // run animation
      

      See more about modules

  • 💣 Adding physics is hard.

    • Three.js: To make your app run with physics you need to make a second world with same 3d objects and apply their transform (position & rotation) to your rendered scene objects (THREE.Scene for example) in every frame.

    • Whitestorm.js: Can be done with modules in a few lines:

      const app = new WHS.App([
        // Other modules...
        new PHYSICS.WorldModule()
      ]);
      
      const sphere = new WHS.Sphere({
        geometry: {
          radius: 3
        },
      
        modules: [
          new PHYSICS.SphereModule({
            mass: 10
          })
        ],
      
        material: new THREE.MeshBasicMaterial({color: 0xff0000}) // red material
      });
      
      app.start(); // run animation
      

      Use physics-module-ammonext as your physics module.

      Try with physics on Codepen:

  • 🔌 Components & plugins

    • Three.js: You can create meshes with geometry and material.

    • Whitestorm.js: You can create components with advanced custom functionality.

      export class BasicComponent extends WHS.MeshComponent {
        build() {
          return new THREE.Mesh(
            new THREE.IcosahedronGeometry(3, 5),
            new THREE.MeshBasicMaterial({color: 0xffffff})
          )
        }
      
        randomize() { // Additional function
          this.position.set(Math.random() * 10, Math.random() * 10, Math.random() * 10);
        }
      }
      
    • See Component system in interactive 3D of web article for more info.


Download

CDN

Proudly hosted by cdnjs

Features

  • 💎 Simple in usage
  • 🚀 Speeds up 3D scene prototyping
  • 🔌 Component based scene graph
  • 💣 Simple integration of any high performance physics even with Worker (Multithreading)
  • 💫 Automatization of rendering
  • 🆕 ES2015+ based
  • 🔷 Extension system (modules)
  • 📦 Webpack friendly
  • ✔️ Integrated Three.js rendering engine
  • 💞 Work with Whitestorm.js and Three.js at the same time

WEBPACK

Use whitestorm-app-boilerplate

Documentation

Documentation for beta is currently in progress. Contact developers in discord chat

Basic application

Try on Codepen:

const app = new WHS.App([
  new WHS.ElementModule(), // attach to DOM
  new WHS.SceneModule(), // creates THREE.Scene instance
  new WHS.CameraModule({
    position: new THREE.Vector3(0, 0, -10)
  }), // creates PerspectiveCamera instance
  new WHS.RenderingModule(), // creates WebGLRenderer instance
  new WHS.OrbitControlsModule() // orbit controls
]);

const sphere = new WHS.Sphere({ // Create sphere comonent.
  geometry: {
    radius: 3
  },

  material: new THREE.MeshBasicMaterial({
    color: 0xffffff, // White color.
  }),

  position: new THREE.Vector3(0, 1, 0) // x: 0, y: 1, z: 0
});

sphere.addTo(app);
console.log(sphere.native); // Logs THREE.Mesh of this component

app.start(); // run animation

React integration

You can easily integrate Whitestorm.js with React using react-whs tool!

$ npm install react react-whs --save

Try with React on Codepen:

Example:


import React, {Component} from 'react';
import {App, Sphere} from 'react-whs';

export class Application extends Component {
  render() {
    return (
      <App modules={[
        new WHS.SceneModule(),
        new WHS.CameraModule({
          position: {
            z: 20
          }
        }),
        new WHS.RenderingModule(),
        new WHS.OrbitControlsModule()
      ]}>
        <Sphere
          geometry={[3, 32, 32]}
          material={new THREE.MeshBasicMaterial({color: 0xffffff})}
          key="1"
        />
      </App>
    )
  }
}

Modules

Devtools

Name Status Description
whs-module-statsjs statsjs-npm WhitestormJS module for JavaScript Performance Monitor
whs-module-dat.gui datgui-npm User Interface for runtime editing properties 🔑🛠🔩

Physics

Name Status Description
physics-module-ammonext physics-ammonext-npm Physics module based on Ammo.js

Audio

Name Status Description
whs-module-audio WIP Audio module for 3D positional sound 🔉

Integrations

Name Status Description
react-whs react-whs-npm Integration with ReactJS

Backers

Support us with a monthly donation and help us continue framework development🎉 and adding new features💡🎁.

Sponsors

Become a sponsor and get your logo on on our README on Github with a link to your website🔭.

Sponsors

forthebadge

Description
🚀 🌪 Super-fast 3D framework for Web Applications 🥇 & Games 🎮. Based on Three.js
Readme 347 MiB
Languages
JavaScript 100%