generator-vrjs
Version:
Generator for vrjs projects
129 lines (100 loc) • 3.5 kB
JavaScript
var THREE = require('three');
var debug = false;
var back_color = 0x6666ff;
var scene, camera, renderer;
var geometry, material, mesh;
var rift;
var active_renderer;
var keytrackr = require('vrjs-trackr-key')
var trackr = keytrackr.make(THREE);
init();
animate();
function init() {
scene = new THREE.Scene();
scene.fog = new THREE.Fog(back_color, 500, 10000);
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.y = 50;
camera.position.z = 1500;
trackr.offset(2, new THREE.Vector3(0, 50, 1500));
trackr.scale(2, new THREE.Vector3(100, 100, 100));
trackr.add(camera, 2);
geometry = new THREE.BoxGeometry(200, 200, 200);
material = new THREE.MeshBasicMaterial({
color: 0xff0000,
wireframe: true
});
// add cube and attach it to channel 0 of tracker
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
trackr.add(mesh, 0);
// add another cube and attach it to channel 1 of tracker
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
trackr.add(mesh, 1);
var groundTexture = THREE.ImageUtils.loadTexture("three/textures/terrain/grasslight-big.jpg");
groundTexture.wrapS = groundTexture.wrapT = THREE.RepeatWrapping;
groundTexture.repeat.set(25, 25);
groundTexture.anisotropy = 16;
var groundMaterial = new THREE.MeshBasicMaterial({
map: groundTexture
});
var ground_mesh = new THREE.Mesh(new THREE.PlaneBufferGeometry(20000, 20000), groundMaterial);
ground_mesh.position.y = -250;
ground_mesh.rotation.x = -Math.PI / 2;
ground_mesh.receiveShadow = true;
scene.add(ground_mesh);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(scene.fog.color, 1);
////////hmd/////////
var hmd = require('./vrjs/view/OculusRiftEffect');
rift = new hmd.Rift(THREE, renderer, {
worldScale: 1
});
rift.setSize(window.innerWidth, window.innerHeight);
////////////////////
//enter_live()
enter_debug()
document.body.appendChild(renderer.domElement);
}
function animate() {
trackr.poll()
requestAnimationFrame(animate);
renderer.setClearColor(back_color);
active_renderer.setSize(window.innerWidth, window.innerHeight);
active_renderer.render(scene, camera);
}
// This will be called on window close by the main process.
// You need to explicitely call window.close to confirm and allow
// the window to close!
// This gives you the chance to do some asynchronous work (save data to files)
// before the window actually closes.
// DO NOT call this function yourself, it will be called by index.js (main process)
function cleanup() {
window.close();
}
function enter_live() {
debug = false;
renderer.autoClear = false;
active_renderer = rift;
require('remote').getCurrentWindow().setFullScreen(true);
}
function enter_debug() {
debug = true;
renderer.autoClear = true;
active_renderer = renderer;
require('remote').getCurrentWindow().setFullScreen(false);
}
document.addEventListener("keydown", function(e) {
if (e.which === 123) {
require('remote').getCurrentWindow().toggleDevTools();
} else if (e.which === 116) {
location.reload();
} else if (e.which === 68) {
if (debug) {
enter_live()
} else {
enter_debug()
}
}
});