【问题标题】:Web viewer for point cloud (PLY) file without faces无面的点云 (PLY) 文件的 Web 查看器
【发布时间】: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.js point-clouds


【解决方案1】:
  const loader = new PLYLoader();
  loader.load('/dataset/format/00000012.ply', function ( geometry ) {
    var material = new THREE.PointsMaterial( { size: 0.005 } );
    material.vertexColors = true //if has colors geometry.attributes.color.count > 0
    var mesh = new THREE.Points(geometry, material)
    scene.add(mesh)
  } );

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2010-11-18
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2019-11-19
    • 2018-11-19
    相关资源
    最近更新 更多