【发布时间】:2015-11-03 10:00:47
【问题描述】:
我正在尝试Three.Js 使用this example 作为参考来通过网络查看 PLY 文件。我的 PLY 文件只是点云,只有顶点,没有面。似乎 ThreeJs 也需要人脸来创建用于渲染的几何图形。 ThreeJS 的替代方法是什么,或者我如何在线显示这些文件?
--更新--
基于SO answer,我将 PLY 文件转换为 JSON 格式,如下所示
var data = [
"-4.3529 -5.92232 21.9669", // x, y, z
"108 99 74", // r, g, b
"-4.25362 -5.98312 22.0832",
"110 88 61",
"-3.85865 -6.05025 22.3349",
...
];
代码如下
<script>
var scene, camera, renderer;
var geometry, material;
start();
function start() {
$.ajax({
'type':'GET',
'url':'http://xxxx.xxxx.com/xxx/lol.json',
'dataType':'json',
'contextType': 'text/plain',
'crossDomain': true,
'xhrFields': { 'withCredentials': true },
'success':function(msg) {
init(msg);
}
});
}
function init(data) {
console.log(data);
/*
*/
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 10000;
var geometry = new THREE.Geometry();
var colors = [];
for ( var x = 0; x < data.length; x = x+2){
var pointCoord = data[ x ].split(" ");
var colorDets = data[ x+1 ].split(" ");
if ( pointCoord.length != 3 || colorDets.length != 3) continue;
var currentColor = new THREE.Color( colorDets[0], colorDets[1], colorDets[2] );
colors.push( currentColor );
geometry.vertices.push(
new THREE.Vector3(pointCoord[2], pointCoord[1], pointCoord[0])
);
};
console.log( colors.length);
console.log( geometry.vertices.length );
geometry.colors = colors;
var material = new THREE.PointCloudMaterial( { size: 1, vertexColors: THREE.VertexColors } );
particleSystem = new THREE.PointCloud( geometry, material );
scene.add( particleSystem );
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
}
但是,它无法渲染任何东西。
更新 2
它没有渲染任何东西的原因是因为缺少这一行
renderer.render(scene, camera);。更新了代码并像魅力一样工作。
【问题讨论】:
-
使用
THREE.PointCloud。
标签: three.js point-clouds