gamedesigner
This commit is contained in:
@@ -10,6 +10,7 @@ class GameEngine {
|
||||
const width = 1200, height = 800;
|
||||
|
||||
const camera = new THREE.PerspectiveCamera(70, width / height, 0.01, 10000);
|
||||
this.raycaster = new THREE.Raycaster();
|
||||
camera.position.set(1, 0, 1);
|
||||
|
||||
const scene = new THREE.Scene();
|
||||
@@ -56,6 +57,10 @@ class GameEngine {
|
||||
this.camera = camera;
|
||||
this.controls = controls;
|
||||
this.mixer = mixer;
|
||||
|
||||
this.activeObjects = new THREE.Group();
|
||||
scene.add(this.activeObjects);
|
||||
|
||||
domNode.appendChild(renderer.domElement);
|
||||
|
||||
let texture = await this.loadTexture('/static/textures/bck.webp');
|
||||
@@ -92,6 +97,13 @@ class GameEngine {
|
||||
})
|
||||
}
|
||||
|
||||
async loadPanorama(url){
|
||||
let t = await this.loadTexture(url);
|
||||
t.mapping = THREE.EquirectangularReflectionMapping;
|
||||
this.scene.background = t;
|
||||
this.scene.environment = t;
|
||||
}
|
||||
|
||||
async captureScreenshot(type = 'image/webp', quality = 80){
|
||||
return new Promise((resolve, reject)=>{
|
||||
this.renderer.domElement.toBlob(resolve, type, quality)
|
||||
@@ -107,6 +119,46 @@ class GameEngine {
|
||||
stop(){
|
||||
this.renderer.setAnimationLoop(null);
|
||||
}
|
||||
|
||||
getMouseVector(mouseEvent, domElement){
|
||||
//console.log(mouseEvent, domElement)
|
||||
const mouse = new THREE.Vector2();
|
||||
if (this.renderType == 'VR'){
|
||||
let x;
|
||||
if (mouseEvent.offsetX > window.innerWidth / 2){
|
||||
x = (mouseEvent.offsetX - window.innerWidth / 2) * 2
|
||||
}else {
|
||||
x = mouseEvent.offsetX * 2;
|
||||
}
|
||||
mouse.x = ( x / window.innerWidth ) * 2 - 1;
|
||||
mouse.y = - ( mouseEvent.offsetY / window.innerHeight ) * 2 + 1;
|
||||
}else{
|
||||
mouse.x = ( mouseEvent.offsetX / domElement.clientWidth ) * 2 - 1;
|
||||
mouse.y = - ( mouseEvent.offsetY / domElement.clientHeight ) * 2 + 1;
|
||||
}
|
||||
return mouse;
|
||||
}
|
||||
|
||||
intersect(mouseEvent, domElement, objects, recursive = false, returnInputObjects = true){
|
||||
let mouse = this.getMouseVector(mouseEvent, domElement);
|
||||
this.raycaster.setFromCamera(mouse, this.camera);
|
||||
console.log(objects)
|
||||
let intersects = this.raycaster.intersectObjects(objects, recursive);
|
||||
if (returnInputObjects && recursive){
|
||||
intersects.forEach(o=>{
|
||||
while (o.object && !objects.includes(o.object)) {
|
||||
o.object = o.object.parent;
|
||||
}
|
||||
})
|
||||
}
|
||||
return intersects;
|
||||
}
|
||||
|
||||
autoScale(object, mk = 1){
|
||||
let bb = new THREE.Box3().setFromObject(object);
|
||||
let k = Math.max(bb.max.x - bb.min.x, bb.max.y - bb.min.y, bb.max.z - bb.min.z);
|
||||
object.scale.multiplyScalar(mk/k);
|
||||
}
|
||||
}
|
||||
|
||||
export {GameEngine}
|
||||
Reference in New Issue
Block a user