You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
895 B
36 lines
895 B
#pragma kernel EstimatePointCloudPosOfs
|
|
|
|
uint2 PointCloudRes;
|
|
//float2 SpaceScale;
|
|
float3 ImuUpVector;
|
|
|
|
uint MinDepth;
|
|
uint MaxDepth;
|
|
|
|
StructuredBuffer<float> SpaceTable;
|
|
StructuredBuffer<uint> DepthMap;
|
|
|
|
RWStructuredBuffer<float3> PointCloudPos;
|
|
RWStructuredBuffer<float> PointCloudOfs;
|
|
RWStructuredBuffer<bool> PointCloudMask;
|
|
|
|
|
|
[numthreads(8, 8, 1)]
|
|
void EstimatePointCloudPosOfs(uint3 id : SV_DispatchThreadID)
|
|
{
|
|
uint i = id.x + id.y * PointCloudRes.x;
|
|
|
|
uint depth2 = DepthMap[i >> 1];
|
|
uint depth = i & 1 != 0 ? depth2 >> 16 : depth2 & 0xffff;
|
|
depth = (depth >= MinDepth && depth <= MaxDepth) * depth;
|
|
|
|
float fDepth = (float)depth / 1000.0;
|
|
bool mask = depth != 0;
|
|
|
|
float3 pos = float3(SpaceTable[i * 3] * fDepth, SpaceTable[i * 3 + 1] * fDepth, fDepth);
|
|
float ofs = dot(ImuUpVector, pos) * mask;
|
|
|
|
PointCloudPos[i] = pos;
|
|
PointCloudOfs[i] = ofs;
|
|
PointCloudMask[i] = mask;
|
|
}
|
|
|