Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce point cloud data to positional data #11

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/clients/reconstruction-client.js
Original file line number Diff line number Diff line change
@@ -22,6 +22,7 @@ import {
distanceFloats2Canvas,
depthFloats2Canvas,
} from '../generators/sg-debug.js';
import { getDestructuredPointCloud } from '../lib/index.js';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a good name for this... We already have a convention of calling these utils. It's certainly not an index.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Convention noted, thanks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Anything in particular come to mind?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is pointCloudDestructureUtil good?


//

@@ -462,7 +463,9 @@ export async function getPointCloud(blob, {
});
if (res.ok) {
const headers = Object.fromEntries(res.headers.entries());
const arrayBuffer = await res.arrayBuffer();
const arrayBuffer = getDestructuredPointCloud(
await res.arrayBuffer()
soulofmischief marked this conversation as resolved.
Show resolved Hide resolved
).points;
return {
headers,
arrayBuffer,
@@ -516,4 +519,4 @@ export function pointCloudArrayBufferToColorAttributeArray(labelImageData, uint8
// none
}
}
}
}
39 changes: 39 additions & 0 deletions src/lib/getDestructuredPointCloud.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1;


/**
* Destructure a point cloud into its component parts.
*/
export function getDestructuredPointCloud(arrayBuffer) {
const numPoints = arrayBuffer.byteLength / pointcloudStride;
const points = new Float32Array(numPoints * 3);
const colors = new Uint8Array(numPoints * 3);
const intensities = new Uint8Array(numPoints);
const classifications = new Uint8Array(numPoints);

let pointIndex = 0;
let colorIndex = 0;
let intensityIndex = 0;
let classificationIndex = 0;

for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) {
points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i, true);
soulofmischief marked this conversation as resolved.
Show resolved Hide resolved
points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 4, true);
points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 8, true);

colors[colorIndex++] = arrayBuffer[i + 12];
colors[colorIndex++] = arrayBuffer[i + 13];
colors[colorIndex++] = arrayBuffer[i + 14];

intensities[intensityIndex++] = arrayBuffer[i + 15];
classifications[classificationIndex++] = arrayBuffer[i + 16];
}

return {
points: points.buffer,
colors: colors.buffer,
intensities: intensities.buffer,
classifications: classifications.buffer,
};
}
2 changes: 2 additions & 0 deletions src/lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

export { getDestructuredPointCloud } from './getDestructuredPointCloud.js';