From 496349b4cee1e97f838763e10ab4880ae2c2004b Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sat, 22 Jun 2019 11:46:16 +0300
Subject: [PATCH] Scale voxel pixel size by depth

---
 applications/reconstruct/src/ray_cast_sdf.cu | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/applications/reconstruct/src/ray_cast_sdf.cu b/applications/reconstruct/src/ray_cast_sdf.cu
index bf2e6c17f..7c3a9afe1 100644
--- a/applications/reconstruct/src/ray_cast_sdf.cu
+++ b/applications/reconstruct/src/ray_cast_sdf.cu
@@ -280,7 +280,7 @@ __global__ void nickRenderKernel(ftl::voxhash::HashData hashData, RayCastData ra
 				const int3 uvi = make_int3(vp.x+u,vp.y+v,vp.z+w);
 
 				// Skip these cases since we didn't load voxels properly
-				if (uvi.x == 8 && uvi.y == 8 || uvi.x == 8 && uvi.z == 8 || uvi.y == 8 && uvi.z == 8) continue;
+				if (uvi.x == 8 && uvi.y == 8 && uvi.z == 8) continue; //|| uvi.x == 8 && uvi.z == 8 || uvi.y == 8 && uvi.z == 8) continue;
 
 				if (voxels[plinVoxelPos(uvi)].sdf < 0.0f) {
 					is_surface = true;
@@ -310,9 +310,9 @@ __global__ void nickRenderKernel(ftl::voxhash::HashData hashData, RayCastData ra
 
 	// For this voxel in hash, get its screen position and check it is on screen
 	// Convert depth map to int by x1000 and use atomicMin
-	//const int pixsize = static_cast<int>(c_hashParams.m_virtualVoxelSize*c_depthCameraParams.fx/camPos.z)+1;
-	int pixsizeX = 10;  // Max voxel pixels
-	int pixsizeY = 10;
+	const int pixsize = static_cast<int>((c_hashParams.m_virtualVoxelSize*c_depthCameraParams.fx/(camPos.z*0.8f)))+1;  // Magic number increase voxel to ensure coverage
+	int pixsizeX = pixsize;  // Max voxel pixels
+	int pixsizeY = pixsize;
 
 	for (int y=0; y<pixsizeY; y++) {
 		for (int x=0; x<pixsizeX; x++) {
@@ -321,10 +321,10 @@ __global__ void nickRenderKernel(ftl::voxhash::HashData hashData, RayCastData ra
 			const float3 pixelWorldPos = params.m_viewMatrixInverse * DepthCameraData::kinectDepthToSkeleton(screenPos.x+x,screenPos.y+y, camPos.z);
 			const float3 posInVoxel = (pixelWorldPos - worldPos) / make_float3(c_hashParams.m_virtualVoxelSize,c_hashParams.m_virtualVoxelSize,c_hashParams.m_virtualVoxelSize);
 
-			if (posInVoxel.x >= 1.0f || posInVoxel.y >= 1.0f || posInVoxel.z >= 1.0f) {
-				pixsizeX = x;
-				continue;
-			}
+			//if (posInVoxel.x >= 1.0f || posInVoxel.y >= 1.0f || posInVoxel.z >= 1.0f) {
+			//	pixsizeX = x;
+			//	continue;
+			//}
 
 			/*float depth;
 			uchar3 col;
-- 
GitLab