3dexperiments/src/index.js

97 lines
2.5 KiB
JavaScript
Raw Normal View History

import Engine from './engine'
import Camera from './engine/camera'
2018-11-27 19:10:53 +00:00
import loadMesh from './engine/mesh/loader'
import { Environment } from './engine/environment'
import { Terrain } from './engine/components/terrain'
import { SimplexHeightMap } from './engine/components/terrain/heightmap'
import { Material } from './engine/mesh/material'
2019-02-26 12:02:12 +00:00
import { CubePlanet } from './engine/components/planet'
let game = new Engine()
let env = new Environment()
2019-02-26 12:02:12 +00:00
// let t = 0
async function pipeline () {
2019-02-12 10:03:18 +00:00
let entity = await loadMesh(game.gl, 'test')
let shader = await game.shaders.createShaderFromFiles(game.gl, 'basic', false)
let terrainShader = await game.shaders.createShaderFromFiles(game.gl, 'terrain', false)
2019-02-12 10:03:18 +00:00
entity.setRotation([0.0, 0.0, -90.0])
2018-11-27 19:10:53 +00:00
// Create a height map based on OpenSimplex noise
let hmap = new SimplexHeightMap(1, 1, 256, 50)
// Create a terrain
let terrain = new Terrain([0.0, 0.0, 0.0], 256, 256)
terrain.createMesh(game.gl, hmap)
// Terrain material
let material = new Material()
material.textures = ['grass-1024.jpg']
await material.loadTextures(game.gl)
terrain.setMaterial(material)
// Create and initialize the camera
2019-02-26 16:22:33 +00:00
let cam = new Camera([-200.0, 1.0, 0.0])
cam.updateProjection(game.gl)
2019-02-26 12:02:12 +00:00
// Planet test
2019-03-01 10:37:30 +00:00
let planet = new CubePlanet([0.0, 0.0, 0.0], 16, 512)
2019-02-26 12:02:12 +00:00
// Update function for camera
2019-03-01 10:37:30 +00:00
let face = 0
game.addUpdateFunction(function (dt) {
if (game.input.isDown('w')) {
cam.processKeyboard(0, dt)
} else if (game.input.isDown('s')) {
cam.processKeyboard(1, dt)
}
if (game.input.isDown('a')) {
cam.processKeyboard(2, dt)
} else if (game.input.isDown('d')) {
cam.processKeyboard(3, dt)
}
if (game.input.mouseMoved && game.input.mouse.btn0) {
cam.processMouseMove(game.input.mouseOffset)
}
2019-02-12 10:03:18 +00:00
// TESTING: Move model forward
2019-02-26 12:02:12 +00:00
// t = t + 0.1
// entity.setPosition([t, 0.0, 0.0])
2019-03-01 10:37:30 +00:00
planet.update(face++, cam)
if (face > 5) face = 0
})
// Render function for the triangle
game.addRenderFunction(function (gl) {
shader.use(gl)
cam.draw(gl, shader)
entity.draw(gl, shader)
2019-02-26 12:02:12 +00:00
planet.draw(gl, shader)
2019-03-01 10:37:30 +00:00
/*
// Use terrain shader
terrainShader.use(gl)
// Set environment variables in shader
env.draw(gl, terrainShader)
// Set the viewport uniforms
cam.draw(gl, terrainShader)
// Draw terrain
terrain.draw(gl, terrainShader)
2019-03-01 10:37:30 +00:00
*/
})
game.startGameLoop()
}
2019-02-12 10:03:18 +00:00
// Start the game, catch any errors thrown
pipeline().catch(function (e) {
console.error(e)
})