Загрузка файлов PLY без изображений — Three.js

Я работаю над веб-службой, основная функциональность которой связана с отображением двоичных файлов .ply. Чтобы открыть и визуализировать облако точек, я использую PLYLoader от Three.js. Я использовал его для представления примеров файлов из Интернета, и это сработало. Но когда я пытаюсь прикрепить свой файл .ply, этого не происходит. Я использую Three.js, потому что мне нужно, чтобы мой дисплей был оптимальным, мои файлы имеют размер не менее 70 МБ.

Пример файла .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();

person Pasterz    schedule 04.05.2016    source источник
comment
постарайтесь уточнить, с какой проблемой вы столкнулись. Как есть, неясно, что вы спрашиваете   -  person Tibrogargan    schedule 05.05.2016
comment
Надеюсь, что это обновление немного объясняет это ;)   -  person Pasterz    schedule 05.05.2016
comment
Тег ply относится к реализации инструментов синтаксического анализа lex и yacc для Python. который, я думаю, не имеет ничего общего с этим вопросом. (Цитата взята из текста тега, который вы увидите, если наведете указатель мыши на тег.)   -  person rici    schedule 05.05.2016
comment
спасибо за редактирование ;)   -  person Pasterz    schedule 05.05.2016
comment
Даже если у моего слоя нет граней ( element face 0) и только element vertex PLYLoader работает на threejs 0.121 - но вместо точек показывает треугольники. Цвета также игнорируются   -  person Remy Mellet    schedule 10.02.2021


Ответы (2)


arrow_upward
0
arrow_downward

Используйте 1_. Он загружает текстуры с помощью MeshNormalMaterial по какой-то странной причине.

person Zain    schedule 13.05.2019

arrow_upward
0
arrow_downward

Использование точечных материалов и точек

  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)
  } );
person Remy Mellet    schedule 10.02.2021