Work on refactoring voxel type.
This commit is contained in:
@ -70,10 +70,10 @@ namespace PolyVox
|
||||
}
|
||||
|
||||
DensityType getDensity() const throw() { return m_uDensity; }
|
||||
MaterialType getMaterial() const throw() { return 1; }
|
||||
//MaterialType getMaterial() const throw() { return 1; }
|
||||
|
||||
void setDensity(DensityType uDensity) { m_uDensity = uDensity; }
|
||||
void setMaterial(MaterialType /*uMaterial*/) { assert(false); } //Cannot set material on voxel of type Density
|
||||
//void setMaterial(MaterialType /*uMaterial*/) { assert(false); } //Cannot set material on voxel of type Density
|
||||
|
||||
//static DensityType getMaxDensity() throw() { return (std::numeric_limits<DensityType>::max)(); }
|
||||
//static DensityType getMinDensity() throw() { return (std::numeric_limits<DensityType>::min)(); }
|
||||
@ -103,6 +103,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityI8 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityI8::DensityType MinDensity;
|
||||
const static DensityI8::DensityType MaxDensity;
|
||||
};
|
||||
@ -111,6 +113,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityU8 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityU8::DensityType MinDensity;
|
||||
const static DensityU8::DensityType MaxDensity;
|
||||
};
|
||||
@ -119,6 +123,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityI16 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityI16::DensityType MinDensity;
|
||||
const static DensityI16::DensityType MaxDensity;
|
||||
};
|
||||
@ -127,6 +133,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityU16 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityU16::DensityType MinDensity;
|
||||
const static DensityU16::DensityType MaxDensity;
|
||||
};
|
||||
@ -135,6 +143,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityFloat >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityFloat::DensityType MinDensity;
|
||||
const static DensityFloat::DensityType MaxDensity;
|
||||
};
|
||||
@ -143,6 +153,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< DensityDouble >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static DensityDouble::DensityType MinDensity;
|
||||
const static DensityDouble::DensityType MaxDensity;
|
||||
};
|
||||
|
@ -97,9 +97,39 @@ namespace PolyVox
|
||||
MaterialType m_uMaterial;
|
||||
};
|
||||
|
||||
typedef Material<uint8_t> Material8;
|
||||
typedef Material<uint16_t> Material16;
|
||||
typedef Material<uint32_t> Material32;
|
||||
typedef Material<uint8_t> MaterialU8;
|
||||
typedef Material<uint16_t> MaterialU16;
|
||||
typedef Material<uint32_t> MaterialU32;
|
||||
|
||||
// These types are here for backwards compatibility but they are a little ambiguous as the name doesn't indicate
|
||||
// whether the values are signed. We would recommend using one of the 8, 16, or 32 bit predefined types above instead.
|
||||
typedef MaterialU8 Material8;
|
||||
typedef MaterialU16 Material16;
|
||||
typedef MaterialU32 Material32;
|
||||
|
||||
template<>
|
||||
class VoxelTypeTraits< MaterialU8 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
};
|
||||
|
||||
template<>
|
||||
class VoxelTypeTraits< MaterialU16 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
};
|
||||
|
||||
template<>
|
||||
class VoxelTypeTraits< MaterialU32 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //__PolyVox_Material_H__
|
||||
|
@ -90,6 +90,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< MaterialDensityPair44 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static MaterialDensityPair44::DensityType MinDensity;
|
||||
const static MaterialDensityPair44::DensityType MaxDensity;
|
||||
};
|
||||
@ -98,6 +100,8 @@ namespace PolyVox
|
||||
class VoxelTypeTraits< MaterialDensityPair88 >
|
||||
{
|
||||
public:
|
||||
const static bool HasDensity;
|
||||
const static bool HasMaterial;
|
||||
const static MaterialDensityPair88::DensityType MinDensity;
|
||||
const static MaterialDensityPair88::DensityType MaxDensity;
|
||||
};
|
||||
|
@ -445,7 +445,11 @@ namespace PolyVox
|
||||
//Choose one of the two materials to use for the vertex (we don't interpolate as interpolation of
|
||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
||||
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||
const uint32_t uMaterial = (std::max)(v000.getMaterial(), v100.getMaterial());
|
||||
uint32_t uMaterial = 0;
|
||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
||||
{
|
||||
uMaterial = (std::max)(v000.getMaterial(), v100.getMaterial());
|
||||
}
|
||||
|
||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, static_cast<float>(uMaterial));
|
||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||
@ -471,7 +475,11 @@ namespace PolyVox
|
||||
//Choose one of the two materials to use for the vertex (we don't interpolate as interpolation of
|
||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
||||
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||
const uint32_t uMaterial = (std::max)(v000.getMaterial(), v010.getMaterial());
|
||||
uint32_t uMaterial = 0;
|
||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
||||
{
|
||||
uMaterial = (std::max)(v000.getMaterial(), v010.getMaterial());
|
||||
}
|
||||
|
||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, static_cast<float>(uMaterial));
|
||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||
@ -497,7 +505,11 @@ namespace PolyVox
|
||||
//Choose one of the two materials to use for the vertex (we don't interpolate as interpolation of
|
||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
||||
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||
const uint32_t uMaterial = (std::max)(v000.getMaterial(), v001.getMaterial());
|
||||
uint32_t uMaterial = 0;
|
||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
||||
{
|
||||
uMaterial = (std::max)(v000.getMaterial(), v001.getMaterial());
|
||||
}
|
||||
|
||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, static_cast<float>(uMaterial));
|
||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||
|
Reference in New Issue
Block a user