26 template<
typename VolumeType,
typename IsQuadNeeded>
29 ,m_sampVolume(volData)
30 ,m_meshCurrent(result)
31 ,m_regSizeInVoxels(region)
33 m_funcIsQuadNeededCallback = isQuadNeeded;
36 template<
typename VolumeType,
typename IsQuadNeeded>
39 m_meshCurrent->clear();
41 for(
int32_t z = m_regSizeInVoxels.getLowerCorner().getZ(); z < m_regSizeInVoxels.getUpperCorner().getZ(); z++)
43 for(
int32_t y = m_regSizeInVoxels.getLowerCorner().getY(); y < m_regSizeInVoxels.getUpperCorner().getY(); y++)
45 for(
int32_t x = m_regSizeInVoxels.getLowerCorner().getX(); x < m_regSizeInVoxels.getUpperCorner().getX(); x++)
48 float regX =
static_cast<float>(x - m_regSizeInVoxels.getLowerCorner().getX());
49 float regY =
static_cast<float>(y - m_regSizeInVoxels.getLowerCorner().getY());
50 float regZ =
static_cast<float>(z - m_regSizeInVoxels.getLowerCorner().getZ());
52 uint32_t material = 0;
54 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x,y,z), m_volData->getVoxelAt(x+1,y,z), material))
61 m_meshCurrent->addTriangleCubic(v0,v2,v1);
62 m_meshCurrent->addTriangleCubic(v1,v2,v3);
64 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x+1,y,z), m_volData->getVoxelAt(x,y,z), material))
71 m_meshCurrent->addTriangleCubic(v0,v1,v2);
72 m_meshCurrent->addTriangleCubic(v1,v3,v2);
75 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x,y,z), m_volData->getVoxelAt(x,y+1,z), material))
82 m_meshCurrent->addTriangleCubic(v0,v1,v2);
83 m_meshCurrent->addTriangleCubic(v1,v3,v2);
85 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x,y+1,z), m_volData->getVoxelAt(x,y,z), material))
92 m_meshCurrent->addTriangleCubic(v0,v2,v1);
93 m_meshCurrent->addTriangleCubic(v1,v2,v3);
96 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x,y,z), m_volData->getVoxelAt(x,y,z+1), material))
103 m_meshCurrent->addTriangleCubic(v0,v2,v1);
104 m_meshCurrent->addTriangleCubic(v1,v2,v3);
106 if(m_funcIsQuadNeededCallback(m_volData->getVoxelAt(x,y,z+1), m_volData->getVoxelAt(x,y,z), material))
113 m_meshCurrent->addTriangleCubic(v0,v1,v2);
114 m_meshCurrent->addTriangleCubic(v1,v3,v2);
120 m_meshCurrent->m_Region = m_regSizeInVoxels;
122 m_meshCurrent->m_vecLodRecords.clear();
125 lodRecord.
endIndex = m_meshCurrent->getNoOfIndices();
126 m_meshCurrent->m_vecLodRecords.push_back(lodRecord);