26 template<
typename VolumeType,
typename IsQuadNeeded>
29 ,m_sampVolume(volData)
30 ,m_meshCurrent(result)
31 ,m_regSizeInVoxels(region)
32 ,m_eWrapMode(eWrapMode)
33 ,m_tBorderValue(tBorderValue)
35 m_funcIsQuadNeededCallback = isQuadNeeded;
38 template<
typename VolumeType,
typename IsQuadNeeded>
41 m_meshCurrent->clear();
43 for(
int32_t z = m_regSizeInVoxels.getLowerZ(); z < m_regSizeInVoxels.getUpperZ(); z++)
45 for(
int32_t y = m_regSizeInVoxels.getLowerY(); y < m_regSizeInVoxels.getUpperY(); y++)
47 for(
int32_t x = m_regSizeInVoxels.getLowerX(); x < m_regSizeInVoxels.getUpperX(); x++)
50 float regX =
static_cast<float>(x - m_regSizeInVoxels.getLowerX());
51 float regY =
static_cast<float>(y - m_regSizeInVoxels.getLowerY());
52 float regZ =
static_cast<float>(z - m_regSizeInVoxels.getLowerZ());
56 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x+1,y,z,m_eWrapMode,m_tBorderValue), material))
63 m_meshCurrent->addTriangleCubic(v0,v2,v1);
64 m_meshCurrent->addTriangleCubic(v1,v2,v3);
66 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x+1,y,z,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), material))
73 m_meshCurrent->addTriangleCubic(v0,v1,v2);
74 m_meshCurrent->addTriangleCubic(v1,v3,v2);
77 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x,y+1,z,m_eWrapMode,m_tBorderValue), material))
84 m_meshCurrent->addTriangleCubic(v0,v1,v2);
85 m_meshCurrent->addTriangleCubic(v1,v3,v2);
87 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x,y+1,z,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), material))
94 m_meshCurrent->addTriangleCubic(v0,v2,v1);
95 m_meshCurrent->addTriangleCubic(v1,v2,v3);
98 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x,y,z+1,m_eWrapMode,m_tBorderValue), material))
105 m_meshCurrent->addTriangleCubic(v0,v2,v1);
106 m_meshCurrent->addTriangleCubic(v1,v2,v3);
108 if(m_funcIsQuadNeededCallback(m_volData->getVoxelWithWrapping(x,y,z+1,m_eWrapMode,m_tBorderValue), m_volData->getVoxelWithWrapping(x,y,z,m_eWrapMode,m_tBorderValue), material))
115 m_meshCurrent->addTriangleCubic(v0,v1,v2);
116 m_meshCurrent->addTriangleCubic(v1,v3,v2);
122 m_meshCurrent->m_Region = m_regSizeInVoxels;
124 m_meshCurrent->m_vecLodRecords.clear();
127 lodRecord.
endIndex = m_meshCurrent->getNoOfIndices();
128 m_meshCurrent->m_vecLodRecords.push_back(lodRecord);