我正在开发一个Web服务,主要功能解决显示二进制.ply文件。要打开并可视化点云,我正在使用Three.js的PLYLoader。我用它来呈现来自互联网的示例文件并且它有效。但是,当我试图附加我的.ply文件时,它没有。我正在使用Three.js因为我需要我的显示器是最佳的,我的文件至少是70mb。
示例.ply文件在这里: https://onedrive.live.com/redir?resid=7DDB287362EDFD5A!761&authkey=!AOHxkZk-6etH--0&ithint=file%2cply
我注意到我拥有的.ply文件与之前显示的.ply文件略有不同。在我的文件中,没有面孔只有点。
基本上我的问题是“是否可以使用Three.js显示点云?或者我应该使用其他库?如果有可能,有人可以帮我配置我的代码以正常工作吗?
这是我的脚本,我支持.ply文件:
var cameraControls;
var container = document.getElementById("three");
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, container.offsetWidth / container.offsetHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( container.offsetWidth, container.offsetHeight );
document.getElementById("three").appendChild( renderer.domElement );
cameraControls = new THREE.OrbitControls( camera, renderer.domElement );
cameraControls.target.set( 0, 0, 0 );
cameraControls.addEventListener( 'change', render );
var geometry = new THREE.BoxGeometry( 3, 3, 3 );
var material = new THREE.MeshPhongMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
var loader = new THREE.PLYLoader();
loader.load( 'resources/cube.ply', function ( geometry ) {
geometry.computeFaceNormals();
var material = new THREE.MeshStandardMaterial( { color: 0x0055ff } );
var mesh = new THREE.Mesh( geometry, material );
mesh.position.y = - 0.25;
mesh.rotation.x = - Math.PI / 2;
mesh.scale.multiplyScalar( 1 );
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add( mesh );
} );
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
var light = new THREE.AmbientLight( 0x404040 ); // soft white light
scene.add( light );
directionalLight.position.set( 0, 1, 0 );
scene.add( directionalLight );
camera.position.z = 5;
function render() {
requestAnimationFrame( render );
renderer.render( scene, camera );
}
render();
答案 0 :(得分:0)
使用THREE.MeshNormalMaterial
。出于某种奇怪的原因,它使用MeshNormalMaterial加载了纹理
答案 1 :(得分:0)
使用点材料和点
const loader = new PLYLoader();
loader.load('00000012.ply', function (geometry) {
var material = new THREE.PointsMaterial( { size: 0.005 } );
material.vertexColors = true //if has colors
var mesh = new THREE.Points(geometry, material)
scene.add(mesh)
} );