Coder Social home page Coder Social logo

influx6 / lemon-js Goto Github PK

View Code? Open in Web Editor NEW

This project forked from donorhan/lemon-js

0.0 1.0 0.0 7.34 MB

An accessible rendering engine in Javascript

Home Page: https://donorhan.github.io/Lemon-JS/

License: MIT License

GLSL 3.07% JavaScript 96.93%

lemon-js's Introduction

Lemon-JS

An accessible rendering engine in Javascript.

Note: The goal of this project is to stay simple to make people understand and experiment with 3D rendering

Demonstrations

Features

  • Access to the low level API
  • Rendering queues and commands system
  • Lights support
  • Shaders
  • Scene management (nodes, hierrachy, …)
  • Separated "engine" logic from the low level part
  • Post processing
  • Loading models, sprites, videos and custom mesh

Todo

  • Fonts support
  • Advanced lighting
  • Batching

Installation

  • Download the latest version of LemonJS or install it with npm install @dono/lemon-js
  • Copy "shaders" folder to your project to get default shaders
  • Enjoy!

The Hello world of 3D : A cube

import {
  ProgramLibrary,
  RenderCanvas,
  Camera,
  Mesh,
  Scene,
  PointLight,
  Geometry,
  Material,
  Color
} from "@dono/lemon-js";

// Use the ProgramLibrary helper to build a shader with lights and texture support
ProgramLibrary.loadFromFile('DefaultShader', './shaders/GLSL/default.vert', './shaders/GLSL/default.frag', ['USE_LIGHT', 'USE_TEXTURE']);

// Create a new renderer using HTML identifier
const renderer = new RenderCanvas("simulation");

// A camera to draw the scene
const camera = new Camera();
camera.move(3, 3, 3);
camera.setViewport(0, 0, renderer.getWidth(), renderer.getHeight());

// Create a scene where we can add sprites, lights, objects, …
const scene = new Scene();

// Now we can create our first cube
const cube = new Mesh(
    Geometry.createCube(0.5, 0.5, 0.5),
    Material.Create('default'),
    ProgramLibrary.get('DefaultShader'),
);
scene.add(cube);

// A light to see something
const light = new PointLight();
light.setPosition(0, 3, 0);
scene.add(light);
let previous = 0;
let deltatime = 0;
const applicationLoop = (timestamp) => {
    requestAnimationFrame(applicationLoop);

    // Calculate elapsed time between two frames
    deltatime = timestamp - previous;
    previous = timestamp;

    // Update scene …
    scene.update(deltatime);

    // … then draw it!
    renderer.clear(new Color(30, 30, 30));
    renderer.render(scene, camera);
    renderer.display();
};
requestAnimationFrame(applicationLoop);

The result can be found here.

How to contribute

  • Clone this repository
  • npm install from the folder
  • npm run dev (developement) or npm run build (production)
  • Enjoy!

License

MIT

lemon-js's People

Contributors

donorhan avatar donovanornikar avatar

Watchers

Ewetumo Alexander avatar

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.