前一阵子正好有个单子是做关于艺术品的3D文件报价,与魔猴网有些许类似。
因故自己倒腾了一下STL3D文件的体积、面积、长宽高的计算方法。
主要基于Three.js,直接贴代码~~~
function init() {
var stats = initStats();
// create a scene, that will hold all our elements such as objects, cameras and lights.
var scene = new THREE.Scene();
// create a camera, which defines where we're looking at.
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
// create a render and set the size
var webGLRenderer = new THREE.WebGLRenderer();
webGLRenderer.setClearColor(new THREE.Color(0x000, 1.0));
webGLRenderer.setSize(window.innerWidth, window.innerHeight);
webGLRenderer.shadowMapEnabled = true;
// position and point the camera to the center of the scene
camera.position.x = 150;
camera.position.y = 150;
camera.position.z = 150;
camera.lookAt(new THREE.Vector3(0, 40, 0));
// add spotlight for the shadows
var spotLight = new THREE.SpotLight(0xffffff);
spotLight.position.set(150, 150, 150);
scene.add(spotLight);
// add the output of the renderer to the html element
document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
// call the render function
var step = 0;
var group;
// model from http://www.thingiverse.com/thing:69709
var loader = new THREE.STLLoader();
var group = new THREE.Object3D();
loader.load("./long.stl", function (geometry) {
// console.log(geometry);
var mat = new THREE.MeshLambertMaterial({color: 0x7777ff});
group = new THREE.Mesh(geometry, mat);
group.rotation.x = -0.5 * Math.PI;
group.scale.set(0.6, 0.6, 0.6);
scene.add(group);
// 获取体积
console.log(THREE.ComputeVolume(geometry))
//获取表面积
console.log(THREE.SuperficialArea(geometry))
//获取长宽高
console.log(THREE.LongWidthHeight(geometry))
});