Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

SharpCoder/webgl-engine

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

webgl-engine

WebGL Engine is a typescript library for making games! It is intended as a learning platform to grow my openGL knowledge, as such, it's probably only useful for game jams and education. A lot of the concepts come from the wonderful WebGL Fundamentals but the engine itself is my own construct. I've taken their ideas and adapted it to something a little reusable.

Installation

Hmm, maybe copy the code and include it? This isn't published to npm, although, you can reference it in your package.json with a little bit of magic. This is how I do it for other projects:

"dependencies": {
    "webgl-engine": "git+git@github.com:SharpCoder/webgl-engine.git"
},

Usage

import { Engine, Scene, cuboid, rads, Repeat, Vec3 } from 'webgl-engine';

// In your project, something like this
let engine = new Engine();

// Register the scenes
const DemoScene = new Scene({
    title: 'demo'
});


const RANGE = 2000;
for (let i = 0; i < 300; i++) {
    const positions = [
        Math.random() * RANGE - Math.random() * RANGE,
        Math.random() * RANGE - Math.random() * RANGE,
        Math.random() * RANGE - Math.random() * RANGE,
    ];

    const scale = Math.random() * 50 + 10;
    DemoScene.addObject({
        position: positions,
        vertexes: cuboid(scale, scale, scale),
        dimensions: [scale, scale, scale],
        offsets: [-scale / 2, -scale / 2, -scale / 2],
        properties: {
            rx: Math.random() * 20 + 2,
            ry: Math.random() * 20 + 2,
        },
        colors: Flatten([
            Repeat(Vec3(0, 199, 255), 6),
            Repeat(Vec3(255, 0, 199), 6),
            Repeat(Vec3(199, 255, 0), 6),
            Repeat(Vec3(0, 255, 222), 6),
            Repeat(Vec3(222, 0, 255), 6),
            Repeat(Vec3(255, 222, 0), 6),
        ]),
        update: function (t: number) {
            this.rotation[0] += rads((t * 1) / this.properties.rx);
            this.rotation[1] += rads((-t * 1) / this.properties.ry);
        },
        rotation: [
            rads(Math.random() * 360),
            rads(Math.random() * 360),
            rads(Math.random() * 360),
        ],
    });
}

engine.addScene(DemoScene);


function draw() {
    engine.draw();
    requestAnimationFrame(draw.bind(this));
}

function update() {
    engine.update();
    requestAnimationFrame(update.bind(this));
}

draw();
update();

Contributing

I'm not sure anyone will want to contribute, but if you are so inspired, I'd gladly encourage discussions through the issues feature on github.

License

MIT

About

A webGL game engine

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.