Garrett Johnson пре 5 година
родитељ
комит
6c8225efa7

+ 1 - 1
example/cmptExample.html

@@ -4,7 +4,7 @@
 		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 		<meta charset="utf-8"/>
 
-		<title>3D Tiles Renderer Batch Example</title>
+		<title>3D Tiles Renderer Composite Format Example</title>
 
         <style>
             * {

+ 30 - 0
example/pntsExample.html

@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+    <head>
+		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+		<meta charset="utf-8"/>
+
+		<title>3D Tiles Renderer Points Example</title>
+
+        <style>
+            * {
+                margin: 0;
+                padding: 0;
+            }
+
+            html {
+                overflow: hidden;
+				font-family: Arial, Helvetica, sans-serif;
+				user-select: none;
+            }
+
+			canvas {
+				image-rendering: pixelated;
+				outline: none;
+			}
+        </style>
+    </head>
+    <body>
+        <script src="./pntsExample.js"></script>
+    </body>
+</html>

+ 99 - 0
example/pntsExample.js

@@ -0,0 +1,99 @@
+import { PNTSLoader } from '../src/index.js';
+import {
+	Scene,
+	DirectionalLight,
+	AmbientLight,
+	WebGLRenderer,
+	PerspectiveCamera,
+	Box3,
+	sRGBEncoding,
+	PCFSoftShadowMap,
+} from 'three';
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+
+let camera, controls, scene, renderer;
+let box, dirLight;
+
+init();
+animate();
+
+function init() {
+
+	scene = new Scene();
+
+	// primary camera view
+	renderer = new WebGLRenderer( { antialias: true } );
+	renderer.setPixelRatio( window.devicePixelRatio );
+	renderer.setSize( window.innerWidth, window.innerHeight );
+	renderer.setClearColor( 0x151c1f );
+	renderer.shadowMap.enabled = true;
+	renderer.shadowMap.type = PCFSoftShadowMap;
+	renderer.outputEncoding = sRGBEncoding;
+
+	document.body.appendChild( renderer.domElement );
+
+	camera = new PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 4000 );
+	camera.position.set( 2, 2, 2 );
+
+	// controls
+	controls = new OrbitControls( camera, renderer.domElement );
+	controls.screenSpacePanning = false;
+	controls.minDistance = 1;
+	controls.maxDistance = 2000;
+
+	// lights
+	dirLight = new DirectionalLight( 0xffffff, 1.25 );
+	dirLight.position.set( 1, 2, 3 ).multiplyScalar( 40 );
+	dirLight.castShadow = true;
+	dirLight.shadow.bias = - 0.01;
+	dirLight.shadow.mapSize.setScalar( 2048 );
+
+	const shadowCam = dirLight.shadow.camera;
+	shadowCam.left = - 200;
+	shadowCam.bottom = - 200;
+	shadowCam.right = 200;
+	shadowCam.top = 200;
+	shadowCam.updateProjectionMatrix();
+
+	scene.add( dirLight );
+
+	const ambLight = new AmbientLight( 0xffffff, 0.05 );
+	scene.add( ambLight );
+
+	box = new Box3();
+
+	new PNTSLoader()
+		.load( 'https://raw.githubusercontent.com/CesiumGS/3d-tiles-samples/master/tilesets/TilesetWithRequestVolume/points.pnts' )
+		.then( res => {
+
+			scene.add( res.scene );
+
+		} );
+
+	onWindowResize();
+	window.addEventListener( 'resize', onWindowResize, false );
+
+}
+
+function onWindowResize() {
+
+	camera.aspect = window.innerWidth / window.innerHeight;
+	renderer.setPixelRatio( window.devicePixelRatio );
+	renderer.setSize( window.innerWidth, window.innerHeight );
+	camera.updateProjectionMatrix();
+
+}
+
+function animate() {
+
+	requestAnimationFrame( animate );
+
+	render();
+
+}
+
+function render() {
+
+	renderer.render( scene, camera );
+
+}

+ 2 - 2
src/base/PNTSLoaderBase.js

@@ -1,9 +1,9 @@
 // PNTS File Format
 // https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/PointCloud/README.md
 
-import { BatchTable } from "../utilities/FeatureTable";
+import { FeatureTable, BatchTable } from "../utilities/FeatureTable.js";
 
-export class I3DMLoaderBase {
+export class PNTSLoaderBase {
 
 	constructor() {
 

+ 2 - 0
src/index.js

@@ -12,6 +12,7 @@ import {
 import { TilesRenderer } from './three/TilesRenderer.js';
 import { B3DMLoader } from './three/B3DMLoader.js';
 import { CMPTLoader } from './three/CMPTLoader.js';
+import { PNTSLoader } from './three/PNTSLoader.js';
 
 import { TilesRendererBase } from './base/TilesRendererBase.js';
 import { B3DMLoaderBase } from './base/B3DMLoaderBase.js';
@@ -27,6 +28,7 @@ export {
 	TilesRenderer,
 	B3DMLoader,
 	CMPTLoader,
+	PNTSLoader,
 
 	TilesRendererBase,
 	B3DMLoaderBase,

+ 6 - 0
src/utilities/FeatureTable.js

@@ -80,6 +80,9 @@ export class FeatureTable {
 					stride = 4;
 					break;
 
+				default:
+					throw new Error( `FeatureTable : Feature type not provided for "${ key }".` );
+
 			}
 
 			let data;
@@ -120,6 +123,9 @@ export class FeatureTable {
 					data = new Float64Array( buffer, arrayStart, arrayLength );
 					break;
 
+				default:
+					throw new Error( `FeatureTable : Feature component type not provided for "${ key }".` );
+
 			}
 
 			const dataEnd = arrayStart + arrayLength * data.BYTES_PER_ELEMENT;