ComputerGraphics/20210129/demo/js/main.js

68 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2021-02-02 18:33:21 +08:00
// 场景、相机、光源定义定义
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000000);
2021-02-05 18:16:35 +08:00
camera.up.set(0,0,1);
2021-02-02 18:33:21 +08:00
var light = new THREE.AmbientLight(0xffffff);
scene.add(light);
// 渲染器定义
2021-02-05 18:16:35 +08:00
var canvas = document.createElement( 'canvas' );
canvas.id = 'model';
var context = canvas.getContext( 'webgl2', {antialias: true, preserveDrawingBuffer: true});
var renderer = new THREE.WebGLRenderer({canvas: canvas, context: context, logarithmicDepthBuffer: true});
2021-02-02 18:33:21 +08:00
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0xffffff);
document.body.appendChild(renderer.domElement);
2021-02-05 18:16:35 +08:00
2021-02-07 14:57:44 +08:00
window.addEventListener('resize', onWindowResize);
// 相机控制
var controls = new THREE.OrbitControls(camera, renderer.domElement);
2021-02-05 18:16:35 +08:00
// 加载模型数据
const loader = new THREE.FileLoader();
loader.load(
'/demo/res/single-demo.json',
function(data)
{
var bimScene = BIMLoader(JSON.parse(data));
var box = new THREE.Box3();
box.expandByObject(bimScene);
var center = new THREE.Vector3();
box.getCenter(center);
var size = new THREE.Vector3();
box.getSize(size);
var result = size.x > size.y ? size.x : size.y;
result = result > size.z ? result : size.z;
var maxLength = Math.round(result);
var radius = center.distanceTo(new THREE.Vector3(center.x + (maxLength/2), center.y + (maxLength/2), center.z + (maxLength/2)));
var cameraPos = new THREE.Vector3(center.x + radius * Math.cos(Math.PI/18) * Math.cos(Math.PI/4), center.y - radius * Math.cos(Math.PI/18) * Math.sin(Math.PI/4), center.z + radius * Math.sin(Math.PI/18));
2021-02-05 18:16:35 +08:00
camera.position.copy(cameraPos);
2021-02-07 14:57:44 +08:00
controls.target = box.getCenter();
2021-02-05 18:16:35 +08:00
scene.add(bimScene);
},
function(xhr)
{
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
},
function(err)
{
console.error('An error happened');
}
2021-02-07 14:57:44 +08:00
);
function onWindowResize()
{
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
2021-02-05 18:16:35 +08:00
function animate() {
requestAnimationFrame( animate );
2021-02-07 14:57:44 +08:00
controls.update();
2021-02-05 18:16:35 +08:00
renderer.render( scene, camera );
}
animate();