Replaced constants with functions for type traits.
This commit is contained in:
parent
1ab1d9bed3
commit
c483b44a41
@ -54,7 +54,7 @@ void createSphereInVolume(SimpleVolume<MaterialDensityPair44>& volData, float fR
|
|||||||
if(fDistToCenter <= fRadius)
|
if(fDistToCenter <= fRadius)
|
||||||
{
|
{
|
||||||
//Our new density value
|
//Our new density value
|
||||||
uint8_t uDensity = VoxelTypeTraits<MaterialDensityPair44>::MaxDensity;
|
uint8_t uDensity = VoxelTypeTraits<MaterialDensityPair44>::maxDensity();
|
||||||
|
|
||||||
//Get the old voxel
|
//Get the old voxel
|
||||||
MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z);
|
MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z);
|
||||||
|
@ -48,7 +48,7 @@ void createSphereInVolume(LargeVolume<MaterialDensityPair44>& volData, float fRa
|
|||||||
//then we make it solid, otherwise we make it empty space.
|
//then we make it solid, otherwise we make it empty space.
|
||||||
if(fDistToCenter <= fRadius)
|
if(fDistToCenter <= fRadius)
|
||||||
{
|
{
|
||||||
volData.setVoxelAt(x,y,z, MaterialDensityPair44(uValue, uValue > 0 ? VoxelTypeTraits<MaterialDensityPair44>::MaxDensity : VoxelTypeTraits<MaterialDensityPair44>::MinDensity));
|
volData.setVoxelAt(x,y,z, MaterialDensityPair44(uValue, uValue > 0 ? VoxelTypeTraits<MaterialDensityPair44>::maxDensity() : VoxelTypeTraits<MaterialDensityPair44>::minDensity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,8 +57,8 @@ void createSphereInVolume(LargeVolume<MaterialDensityPair44>& volData, float fRa
|
|||||||
|
|
||||||
void createCubeInVolume(LargeVolume<MaterialDensityPair44>& volData, Vector3DInt32 lowerCorner, Vector3DInt32 upperCorner, uint8_t uValue)
|
void createCubeInVolume(LargeVolume<MaterialDensityPair44>& volData, Vector3DInt32 lowerCorner, Vector3DInt32 upperCorner, uint8_t uValue)
|
||||||
{
|
{
|
||||||
int maxDen = VoxelTypeTraits<MaterialDensityPair44>::MaxDensity;
|
int maxDen = VoxelTypeTraits<MaterialDensityPair44>::maxDensity();
|
||||||
int minDen = VoxelTypeTraits<MaterialDensityPair44>::MinDensity;
|
int minDen = VoxelTypeTraits<MaterialDensityPair44>::minDensity();
|
||||||
//This three-level for loop iterates over every voxel between the specified corners
|
//This three-level for loop iterates over every voxel between the specified corners
|
||||||
for (int z = lowerCorner.getZ(); z <= upperCorner.getZ(); z++)
|
for (int z = lowerCorner.getZ(); z <= upperCorner.getZ(); z++)
|
||||||
{
|
{
|
||||||
|
@ -97,9 +97,9 @@ int main(int argc, char *argv[])
|
|||||||
createCubeInVolume(volData, Vector3DInt32(midPos+1, minPos, midPos+1), Vector3DInt32(maxPos, midPos-1, maxPos), 0);
|
createCubeInVolume(volData, Vector3DInt32(midPos+1, minPos, midPos+1), Vector3DInt32(maxPos, midPos-1, maxPos), 0);
|
||||||
createCubeInVolume(volData, Vector3DInt32(minPos, midPos+1, midPos+1), Vector3DInt32(midPos-1, maxPos, maxPos), 0);
|
createCubeInVolume(volData, Vector3DInt32(minPos, midPos+1, midPos+1), Vector3DInt32(midPos-1, maxPos, maxPos), 0);
|
||||||
|
|
||||||
createCubeInVolume(volData, Vector3DInt32(1, midPos-10, midPos-10), Vector3DInt32(maxPos-1, midPos+10, midPos+10), VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
createCubeInVolume(volData, Vector3DInt32(1, midPos-10, midPos-10), Vector3DInt32(maxPos-1, midPos+10, midPos+10), VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
createCubeInVolume(volData, Vector3DInt32(midPos-10, 1, midPos-10), Vector3DInt32(midPos+10, maxPos-1, midPos+10), VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
createCubeInVolume(volData, Vector3DInt32(midPos-10, 1, midPos-10), Vector3DInt32(midPos+10, maxPos-1, midPos+10), VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
createCubeInVolume(volData, Vector3DInt32(midPos-10, midPos-10 ,1), Vector3DInt32(midPos+10, midPos+10, maxPos-1), VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
createCubeInVolume(volData, Vector3DInt32(midPos-10, midPos-10 ,1), Vector3DInt32(midPos+10, midPos+10, maxPos-1), VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
|
|
||||||
//Smooth part of the volume
|
//Smooth part of the volume
|
||||||
RawVolume<MaterialDensityPair44> tempVolume(PolyVox::Region(0,0,0,128, 128, 128));
|
RawVolume<MaterialDensityPair44> tempVolume(PolyVox::Region(0,0,0,128, 128, 128));
|
||||||
|
@ -50,7 +50,7 @@ void createPerlinVolumeSlow(LargeVolume<MaterialDensityPair44>& volData)
|
|||||||
|
|
||||||
perlinVal += 1.0f;
|
perlinVal += 1.0f;
|
||||||
perlinVal *= 0.5f;
|
perlinVal *= 0.5f;
|
||||||
perlinVal *= VoxelTypeTraits<MaterialDensityPair44>::MaxDensity;
|
perlinVal *= VoxelTypeTraits<MaterialDensityPair44>::maxDensity();
|
||||||
|
|
||||||
MaterialDensityPair44 voxel;
|
MaterialDensityPair44 voxel;
|
||||||
|
|
||||||
@ -60,12 +60,12 @@ void createPerlinVolumeSlow(LargeVolume<MaterialDensityPair44>& volData)
|
|||||||
/*if(perlinVal < 0.0f)
|
/*if(perlinVal < 0.0f)
|
||||||
{
|
{
|
||||||
voxel.setMaterial(245);
|
voxel.setMaterial(245);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voxel.setMaterial(0);
|
voxel.setMaterial(0);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MinDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::minDensity());
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
volData.setVoxelAt(x, y, z, voxel);
|
volData.setVoxelAt(x, y, z, voxel);
|
||||||
@ -105,12 +105,12 @@ void createPerlinVolumeSlow(LargeVolume<MaterialDensityPair44>& volData)
|
|||||||
if(perlinVal < 0.0f)
|
if(perlinVal < 0.0f)
|
||||||
{
|
{
|
||||||
voxel.setMaterial(245);
|
voxel.setMaterial(245);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voxel.setMaterial(0);
|
voxel.setMaterial(0);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MinDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::minDensity());
|
||||||
}
|
}
|
||||||
|
|
||||||
volData.setVoxelAt(x, y, z, voxel);
|
volData.setVoxelAt(x, y, z, voxel);
|
||||||
@ -143,12 +143,12 @@ void createPerlinTerrain(LargeVolume<MaterialDensityPair44>& volData)
|
|||||||
if(z < perlinVal)
|
if(z < perlinVal)
|
||||||
{
|
{
|
||||||
voxel.setMaterial(245);
|
voxel.setMaterial(245);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voxel.setMaterial(0);
|
voxel.setMaterial(0);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MinDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::minDensity());
|
||||||
}
|
}
|
||||||
|
|
||||||
volData.setVoxelAt(x, y, z, voxel);
|
volData.setVoxelAt(x, y, z, voxel);
|
||||||
@ -181,7 +181,7 @@ void createSphereInVolume(LargeVolume<MaterialDensityPair44>& volData, Vector3DF
|
|||||||
if(fDistToCenter <= fRadius)
|
if(fDistToCenter <= fRadius)
|
||||||
{
|
{
|
||||||
//Our new density value
|
//Our new density value
|
||||||
uint8_t uDensity = VoxelTypeTraits<MaterialDensityPair44>::MaxDensity;
|
uint8_t uDensity = VoxelTypeTraits<MaterialDensityPair44>::maxDensity();
|
||||||
|
|
||||||
//Get the old voxel
|
//Get the old voxel
|
||||||
MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z);
|
MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z);
|
||||||
@ -219,17 +219,17 @@ void load(const ConstVolumeProxy<MaterialDensityPair44>& volume, const PolyVox::
|
|||||||
if((x-xpos)*(x-xpos) + (z-zpos)*(z-zpos) < 200) {
|
if((x-xpos)*(x-xpos) + (z-zpos)*(z-zpos) < 200) {
|
||||||
// tunnel
|
// tunnel
|
||||||
voxel.setMaterial(0);
|
voxel.setMaterial(0);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MinDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::minDensity());
|
||||||
} else {
|
} else {
|
||||||
// solid
|
// solid
|
||||||
voxel.setMaterial(245);
|
voxel.setMaterial(245);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MaxDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::maxDensity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voxel.setMaterial(0);
|
voxel.setMaterial(0);
|
||||||
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::MinDensity);
|
voxel.setDensity(VoxelTypeTraits<MaterialDensityPair44>::minDensity());
|
||||||
}
|
}
|
||||||
|
|
||||||
volume.setVoxelAt(x, y, z, voxel);
|
volume.setVoxelAt(x, y, z, voxel);
|
||||||
|
@ -55,8 +55,8 @@ void createSphereInVolume(SimpleVolume<Density8>& volData, float fRadius)
|
|||||||
if(fDistToCenter <= fRadius)
|
if(fDistToCenter <= fRadius)
|
||||||
{
|
{
|
||||||
//Our new density value
|
//Our new density value
|
||||||
//uint8_t uDensity = Density8::getMaxDensity();
|
//uint8_t uDensity = Density8::getmaxDensity()();
|
||||||
uint8_t uDensity = VoxelTypeTraits<Density8>::MaxDensity;
|
uint8_t uDensity = VoxelTypeTraits<Density8>::maxDensity();
|
||||||
|
|
||||||
//Get the old voxel
|
//Get the old voxel
|
||||||
Density8 voxel = volData.getVoxelAt(x,y,z);
|
Density8 voxel = volData.getVoxelAt(x,y,z);
|
||||||
|
@ -6,16 +6,12 @@ PROJECT(PolyVoxCore)
|
|||||||
SET(CORE_SRC_FILES
|
SET(CORE_SRC_FILES
|
||||||
source/ArraySizes.cpp
|
source/ArraySizes.cpp
|
||||||
source/AStarPathfinder.cpp
|
source/AStarPathfinder.cpp
|
||||||
source/Density.cpp
|
|
||||||
source/GradientEstimators.cpp
|
source/GradientEstimators.cpp
|
||||||
source/Log.cpp
|
source/Log.cpp
|
||||||
source/Material.cpp
|
|
||||||
source/MaterialDensityPair.cpp
|
|
||||||
source/MeshDecimator.cpp
|
source/MeshDecimator.cpp
|
||||||
source/Region.cpp
|
source/Region.cpp
|
||||||
source/SimpleInterface.cpp
|
source/SimpleInterface.cpp
|
||||||
source/VertexTypes.cpp
|
source/VertexTypes.cpp
|
||||||
source/Voxel.cpp
|
|
||||||
source/VoxelFilters.cpp
|
source/VoxelFilters.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -37,18 +37,18 @@ namespace PolyVox
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(VoxelTypeTraits<VoxelType>::HasDensity)
|
if(VoxelTypeTraits<VoxelType>::hasDensity())
|
||||||
{
|
{
|
||||||
//and if their density is above the threshold.
|
//and if their density is above the threshold.
|
||||||
VoxelType voxel = volData->getVoxelAt(v3dPos);
|
VoxelType voxel = volData->getVoxelAt(v3dPos);
|
||||||
VoxelType::DensityType tThreshold = (VoxelTypeTraits<VoxelType>::MinDensity + VoxelTypeTraits<VoxelType>::MaxDensity) / 2;
|
VoxelType::DensityType tThreshold = (VoxelTypeTraits<VoxelType>::minDensity() + VoxelTypeTraits<VoxelType>::maxDensity()) / 2;
|
||||||
if(voxel.getDensity() >= tThreshold)
|
if(voxel.getDensity() >= tThreshold)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
if(VoxelTypeTraits<VoxelType>::hasMaterial())
|
||||||
{
|
{
|
||||||
//and if their material is not zero.
|
//and if their material is not zero.
|
||||||
VoxelType voxel = volData->getVoxelAt(v3dPos);
|
VoxelType voxel = volData->getVoxelAt(v3dPos);
|
||||||
|
@ -31,6 +31,9 @@ freely, subject to the following restrictions:
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
|
#undef min
|
||||||
|
#undef max
|
||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
///This class represents a voxel storing only a density.
|
///This class represents a voxel storing only a density.
|
||||||
@ -45,8 +48,11 @@ namespace PolyVox
|
|||||||
///
|
///
|
||||||
/// \sa Material, MaterialDensityPair
|
/// \sa Material, MaterialDensityPair
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// int32_t template parameter is a dummy, required as the compiler expects to be able to declare an
|
||||||
|
// instance of VoxelType::MaterialType without knowing that VoxelType doesn't actually have a material.
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
class Density : public Voxel<Type, uint8_t>
|
class Density : public Voxel<Type, int32_t>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//We expose DensityType and MaterialType in this way so that, when code is
|
//We expose DensityType and MaterialType in this way so that, when code is
|
||||||
@ -54,7 +60,7 @@ namespace PolyVox
|
|||||||
//using code such as 'VoxelType::DensityType value = voxel.getDensity()'
|
//using code such as 'VoxelType::DensityType value = voxel.getDensity()'
|
||||||
//or 'VoxelType::MaterialType value = voxel.getMaterial()'.
|
//or 'VoxelType::MaterialType value = voxel.getMaterial()'.
|
||||||
typedef Type DensityType;
|
typedef Type DensityType;
|
||||||
typedef uint8_t MaterialType; //Shouldn't define this one...
|
typedef int32_t MaterialType; //Shouldn't define this one...
|
||||||
|
|
||||||
Density() : m_uDensity(0) {}
|
Density() : m_uDensity(0) {}
|
||||||
Density(DensityType uDensity) : m_uDensity(uDensity) {}
|
Density(DensityType uDensity) : m_uDensity(uDensity) {}
|
||||||
@ -75,8 +81,8 @@ namespace PolyVox
|
|||||||
void setDensity(DensityType uDensity) { m_uDensity = uDensity; }
|
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 getmaxDensity()() throw() { return (std::numeric_limits<DensityType>::max)(); }
|
||||||
//static DensityType getMinDensity() throw() { return (std::numeric_limits<DensityType>::min)(); }
|
//static DensityType getminDensity()() throw() { return (std::numeric_limits<DensityType>::min)(); }
|
||||||
static DensityType getThreshold() throw() { return (std::numeric_limits<DensityType>::max)() / 2; }
|
static DensityType getThreshold() throw() { return (std::numeric_limits<DensityType>::max)() / 2; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -103,60 +109,60 @@ namespace PolyVox
|
|||||||
class VoxelTypeTraits< DensityI8 >
|
class VoxelTypeTraits< DensityI8 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityI8::DensityType MinDensity;
|
static DensityI8::DensityType minDensity() { return -std::numeric_limits<DensityI8::DensityType>::max(); }
|
||||||
const static DensityI8::DensityType MaxDensity;
|
static DensityI8::DensityType maxDensity() { return std::numeric_limits<DensityI8::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< DensityU8 >
|
class VoxelTypeTraits< DensityU8 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityU8::DensityType MinDensity;
|
static DensityU8::DensityType minDensity() { return std::numeric_limits<DensityU8::DensityType>::min(); }
|
||||||
const static DensityU8::DensityType MaxDensity;
|
static DensityU8::DensityType maxDensity() { return std::numeric_limits<DensityU8::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< DensityI16 >
|
class VoxelTypeTraits< DensityI16 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityI16::DensityType MinDensity;
|
static DensityI16::DensityType minDensity() { return -std::numeric_limits<DensityI16::DensityType>::max(); }
|
||||||
const static DensityI16::DensityType MaxDensity;
|
static DensityI16::DensityType maxDensity() { return std::numeric_limits<DensityI16::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< DensityU16 >
|
class VoxelTypeTraits< DensityU16 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityU16::DensityType MinDensity;
|
static DensityU16::DensityType minDensity() { return std::numeric_limits<DensityU16::DensityType>::min(); }
|
||||||
const static DensityU16::DensityType MaxDensity;
|
static DensityU16::DensityType maxDensity() { return std::numeric_limits<DensityU16::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< DensityFloat >
|
class VoxelTypeTraits< DensityFloat >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityFloat::DensityType MinDensity;
|
static DensityFloat::DensityType minDensity() { return -std::numeric_limits<DensityFloat::DensityType>::max(); }
|
||||||
const static DensityFloat::DensityType MaxDensity;
|
static DensityFloat::DensityType maxDensity() { return std::numeric_limits<DensityFloat::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< DensityDouble >
|
class VoxelTypeTraits< DensityDouble >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static DensityDouble::DensityType MinDensity;
|
static DensityDouble::DensityType minDensity() { return -std::numeric_limits<DensityDouble::DensityType>::max(); }
|
||||||
const static DensityDouble::DensityType MaxDensity;
|
static DensityDouble::DensityType maxDensity() { return std::numeric_limits<DensityDouble::DensityType>::max(); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,15 +45,18 @@ namespace PolyVox
|
|||||||
///
|
///
|
||||||
/// \sa Density, MaterialDensityPair
|
/// \sa Density, MaterialDensityPair
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// int32_t template parameter is a dummy, required as the compiler expects to be able to declare an
|
||||||
|
// instance of VoxelType::DensityType without knowing that VoxelType doesn't actually have a density.
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
class Material : public Voxel<uint8_t, Type>
|
class Material : public Voxel<int32_t, Type>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//We expose DensityType and MaterialType in this way so that, when code is
|
//We expose DensityType and MaterialType in this way so that, when code is
|
||||||
//templatised on voxel type, it can determine the underlying storage type
|
//templatised on voxel type, it can determine the underlying storage type
|
||||||
//using code such as 'VoxelType::DensityType value = voxel.getDensity()'
|
//using code such as 'VoxelType::DensityType value = voxel.getDensity()'
|
||||||
//or 'VoxelType::MaterialType value = voxel.getMaterial()'.
|
//or 'VoxelType::MaterialType value = voxel.getMaterial()'.
|
||||||
typedef uint8_t DensityType; //Shouldn't define this one...
|
typedef int32_t DensityType;
|
||||||
typedef Type MaterialType;
|
typedef Type MaterialType;
|
||||||
|
|
||||||
Material() : m_uMaterial(0) {}
|
Material() : m_uMaterial(0) {}
|
||||||
@ -74,12 +77,12 @@ namespace PolyVox
|
|||||||
//We don't actually have a density, so make one up based on the material.
|
//We don't actually have a density, so make one up based on the material.
|
||||||
if(m_uMaterial == 0)
|
if(m_uMaterial == 0)
|
||||||
{
|
{
|
||||||
//return getMinDensity();
|
//return getminDensity()();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//return getMaxDensity();
|
//return getmaxDensity()();
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,8 +92,8 @@ namespace PolyVox
|
|||||||
void setDensity(DensityType /*uDensity*/) { assert(false); } //Cannot set density on voxel of type Material
|
void setDensity(DensityType /*uDensity*/) { assert(false); } //Cannot set density on voxel of type Material
|
||||||
void setMaterial(MaterialType uMaterial) { m_uMaterial = uMaterial; }
|
void setMaterial(MaterialType uMaterial) { m_uMaterial = uMaterial; }
|
||||||
|
|
||||||
//static DensityType getMaxDensity() throw() { return 2; }
|
//static DensityType getmaxDensity()() throw() { return 2; }
|
||||||
//static DensityType getMinDensity() throw() { return 0; }
|
//static DensityType getminDensity()() throw() { return 0; }
|
||||||
static DensityType getThreshold() throw() { return 1; }
|
static DensityType getThreshold() throw() { return 1; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -111,30 +114,30 @@ namespace PolyVox
|
|||||||
class VoxelTypeTraits< MaterialU8 >
|
class VoxelTypeTraits< MaterialU8 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return false; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return true; }
|
||||||
const static MaterialU8::DensityType MinDensity;
|
static int minDensity() { assert(false); return 0; }
|
||||||
const static MaterialU8::DensityType MaxDensity;
|
static int maxDensity() { assert(false); return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< MaterialU16 >
|
class VoxelTypeTraits< MaterialU16 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return false; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return true; }
|
||||||
const static MaterialU16::DensityType MinDensity;
|
static int minDensity() { assert(false); return 0; }
|
||||||
const static MaterialU16::DensityType MaxDensity;
|
static int maxDensity() { assert(false); return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< MaterialU32 >
|
class VoxelTypeTraits< MaterialU32 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return false; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return true; }
|
||||||
const static MaterialU32::DensityType MinDensity;
|
static int minDensity() { assert(false); return 0; }
|
||||||
const static MaterialU32::DensityType MaxDensity;
|
static int maxDensity() { assert(false); return 0; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,8 +74,8 @@ namespace PolyVox
|
|||||||
void setDensity(DensityType uDensity) { m_uDensity = uDensity; }
|
void setDensity(DensityType uDensity) { m_uDensity = uDensity; }
|
||||||
void setMaterial(MaterialType uMaterial) { m_uMaterial = uMaterial; }
|
void setMaterial(MaterialType uMaterial) { m_uMaterial = uMaterial; }
|
||||||
|
|
||||||
//static DensityType getMaxDensity() throw() { return (0x01 << NoOfDensityBits) - 1; }
|
//static DensityType getmaxDensity()() throw() { return (0x01 << NoOfDensityBits) - 1; }
|
||||||
//static DensityType getMinDensity() throw() { return 0; }
|
//static DensityType getminDensity()() throw() { return 0; }
|
||||||
static DensityType getThreshold() throw() {return 0x01 << (NoOfDensityBits - 1);}
|
static DensityType getThreshold() throw() {return 0x01 << (NoOfDensityBits - 1);}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -90,20 +90,20 @@ namespace PolyVox
|
|||||||
class VoxelTypeTraits< MaterialDensityPair44 >
|
class VoxelTypeTraits< MaterialDensityPair44 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return true; }
|
||||||
const static MaterialDensityPair44::DensityType MinDensity;
|
static MaterialDensityPair44::DensityType minDensity() { return 0; }
|
||||||
const static MaterialDensityPair44::DensityType MaxDensity;
|
static MaterialDensityPair44::DensityType maxDensity() { return 15; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
class VoxelTypeTraits< MaterialDensityPair88 >
|
class VoxelTypeTraits< MaterialDensityPair88 >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return true; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return true; }
|
||||||
const static MaterialDensityPair88::DensityType MinDensity;
|
static MaterialDensityPair88::DensityType minDensity() { return 0; }
|
||||||
const static MaterialDensityPair88::DensityType MaxDensity;
|
static MaterialDensityPair88::DensityType maxDensity() { return 255; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ namespace PolyVox
|
|||||||
class SurfaceExtractor
|
class SurfaceExtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SurfaceExtractor(VolumeType<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterialNormal>* result, typename VoxelType::DensityType tThreshold = (VoxelTypeTraits<VoxelType>::MinDensity + VoxelTypeTraits<VoxelType>::MaxDensity) / 2);
|
SurfaceExtractor(VolumeType<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterialNormal>* result, typename VoxelType::DensityType tThreshold = (VoxelTypeTraits<VoxelType>::minDensity() + VoxelTypeTraits<VoxelType>::maxDensity()) / 2);
|
||||||
|
|
||||||
void execute();
|
void execute();
|
||||||
|
|
||||||
|
@ -433,7 +433,7 @@ namespace PolyVox
|
|||||||
const VoxelType v100 = m_sampVolume.getVoxel();
|
const VoxelType v100 = m_sampVolume.getVoxel();
|
||||||
const Vector3DFloat n100 = computeCentralDifferenceGradient(m_sampVolume);
|
const Vector3DFloat n100 = computeCentralDifferenceGradient(m_sampVolume);
|
||||||
|
|
||||||
//float fInterp = static_cast<float>(v100.getDensity() - VoxelType::getMinDensity()) / static_cast<float>(VoxelType::getMaxDensity() - VoxelType::getMinDensity());
|
//float fInterp = static_cast<float>(v100.getDensity() - VoxelType::getminDensity()()) / static_cast<float>(VoxelType::getmaxDensity()() - VoxelType::getminDensity()());
|
||||||
float fInterp = static_cast<float>(m_tThreshold - v000.getDensity()) / static_cast<float>(v100.getDensity() - v000.getDensity());
|
float fInterp = static_cast<float>(m_tThreshold - v000.getDensity()) / static_cast<float>(v100.getDensity() - v000.getDensity());
|
||||||
//fInterp = 0.5f;
|
//fInterp = 0.5f;
|
||||||
|
|
||||||
@ -447,7 +447,7 @@ namespace PolyVox
|
|||||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
//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.
|
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||||
uint32_t uMaterial = 0;
|
uint32_t uMaterial = 0;
|
||||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
if(VoxelTypeTraits<VoxelType>::hasMaterial())
|
||||||
{
|
{
|
||||||
uMaterial = (std::max)(v000.getMaterial(), v100.getMaterial());
|
uMaterial = (std::max)(v000.getMaterial(), v100.getMaterial());
|
||||||
}
|
}
|
||||||
@ -477,7 +477,7 @@ namespace PolyVox
|
|||||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
//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.
|
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||||
uint32_t uMaterial = 0;
|
uint32_t uMaterial = 0;
|
||||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
if(VoxelTypeTraits<VoxelType>::hasMaterial())
|
||||||
{
|
{
|
||||||
uMaterial = (std::max)(v000.getMaterial(), v010.getMaterial());
|
uMaterial = (std::max)(v000.getMaterial(), v010.getMaterial());
|
||||||
}
|
}
|
||||||
@ -507,7 +507,7 @@ namespace PolyVox
|
|||||||
//material IDs does not make sense). We take the largest, so that if we are working on a material-only
|
//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.
|
//volume we get the one which is non-zero. Both materials can be non-zero if our volume has a density component.
|
||||||
uint32_t uMaterial = 0;
|
uint32_t uMaterial = 0;
|
||||||
if(VoxelTypeTraits<VoxelType>::HasMaterial)
|
if(VoxelTypeTraits<VoxelType>::hasMaterial())
|
||||||
{
|
{
|
||||||
uMaterial = (std::max)(v000.getMaterial(), v001.getMaterial());
|
uMaterial = (std::max)(v000.getMaterial(), v001.getMaterial());
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ namespace PolyVox
|
|||||||
// Various properties of the voxel types can be expressed via types traits, similar to the way std::numeric_limits is implemented.
|
// Various properties of the voxel types can be expressed via types traits, similar to the way std::numeric_limits is implemented.
|
||||||
// This has some advantages compared to storing the properties directly in the voxel class. For example, by using traits it is possible
|
// This has some advantages compared to storing the properties directly in the voxel class. For example, by using traits it is possible
|
||||||
// to also apply these properties to primative types which might be desirable (the Volume classes do accept primative types as template
|
// to also apply these properties to primative types which might be desirable (the Volume classes do accept primative types as template
|
||||||
// parameters). Also, properties such as MinDensity and MaxDensity would be difficult to represent though class members because they
|
// parameters). Also, properties such as minDensity() and maxDensity() would be difficult to represent though class members because they
|
||||||
// depend ont the type (float has a very different range from int8_t for example).
|
// depend ont the type (float has a very different range from int8_t for example).
|
||||||
//
|
//
|
||||||
// The properties are currently exposed as constants because we need access to them at compile time. Ideally we would like to make them
|
// The properties are currently exposed as constants because we need access to them at compile time. Ideally we would like to make them
|
||||||
@ -68,10 +68,15 @@ namespace PolyVox
|
|||||||
class VoxelTypeTraits
|
class VoxelTypeTraits
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const static bool HasDensity;
|
static bool hasDensity() { return false; }
|
||||||
const static bool HasMaterial;
|
static bool hasMaterial() { return false; }
|
||||||
const static typename Type::DensityType MinDensity;
|
|
||||||
const static typename Type::DensityType MaxDensity;
|
// These default implementations return an int32_t rather than void so that the result can be
|
||||||
|
// assigned to a variable for all voxel types (even those without density coponents). Calls
|
||||||
|
// to these functions should be protected by calls to hasDensity(), but the compiler still
|
||||||
|
// needs to ensure the assignment is compilable even if hasDensity() returns false.
|
||||||
|
static int32_t minDensity() { assert(false); return 0; }
|
||||||
|
static int32_t maxDensity() { assert(false); return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
Copyright (c) 2005-2009 David Williams
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "PolyVoxCore/Density.h"
|
|
||||||
|
|
||||||
#include <cfloat> //Can't use <limits> as we need compile time constants.
|
|
||||||
|
|
||||||
namespace PolyVox
|
|
||||||
{
|
|
||||||
const bool VoxelTypeTraits< DensityI8 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityI8 >::HasMaterial = false;
|
|
||||||
const DensityI8::DensityType VoxelTypeTraits< DensityI8 >::MinDensity = -127;
|
|
||||||
const DensityI8::DensityType VoxelTypeTraits< DensityI8 >::MaxDensity = 127;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< DensityU8 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityU8 >::HasMaterial = false;
|
|
||||||
const DensityU8::DensityType VoxelTypeTraits< DensityU8 >::MinDensity = 0;
|
|
||||||
const DensityU8::DensityType VoxelTypeTraits< DensityU8 >::MaxDensity = 255;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< DensityI16 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityI16 >::HasMaterial = false;
|
|
||||||
const DensityI16::DensityType VoxelTypeTraits< DensityI16 >::MinDensity = -32767;
|
|
||||||
const DensityI16::DensityType VoxelTypeTraits< DensityI16 >::MaxDensity = 32767;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< DensityU16 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityU16 >::HasMaterial = false;
|
|
||||||
const DensityU16::DensityType VoxelTypeTraits< DensityU16 >::MinDensity = 0;
|
|
||||||
const DensityU16::DensityType VoxelTypeTraits< DensityU16 >::MaxDensity = 65535;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< DensityFloat >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityFloat >::HasMaterial = false;
|
|
||||||
const DensityFloat::DensityType VoxelTypeTraits< DensityFloat >::MinDensity = -FLT_MAX;
|
|
||||||
const DensityFloat::DensityType VoxelTypeTraits< DensityFloat >::MaxDensity = FLT_MAX;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< DensityDouble >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< DensityDouble >::HasMaterial = false;
|
|
||||||
const DensityDouble::DensityType VoxelTypeTraits< DensityDouble >::MinDensity = -DBL_MAX;
|
|
||||||
const DensityDouble::DensityType VoxelTypeTraits< DensityDouble >::MaxDensity = DBL_MAX;
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
Copyright (c) 2005-2009 David Williams
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "PolyVoxCore/Material.h"
|
|
||||||
|
|
||||||
#include <cfloat> //Can't use <limits> as we need compile time constants.
|
|
||||||
|
|
||||||
namespace PolyVox
|
|
||||||
{
|
|
||||||
const bool VoxelTypeTraits< MaterialU8 >::HasDensity = false;
|
|
||||||
const bool VoxelTypeTraits< MaterialU8 >::HasMaterial = true;
|
|
||||||
const MaterialU8::DensityType VoxelTypeTraits< MaterialU8 >::MinDensity = 0;
|
|
||||||
const MaterialU8::DensityType VoxelTypeTraits< MaterialU8 >::MaxDensity = 0;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< MaterialU16 >::HasDensity = false;
|
|
||||||
const bool VoxelTypeTraits< MaterialU16 >::HasMaterial = true;
|
|
||||||
const MaterialU16::DensityType VoxelTypeTraits< MaterialU16 >::MinDensity = 0;
|
|
||||||
const MaterialU16::DensityType VoxelTypeTraits< MaterialU16 >::MaxDensity = 0;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< MaterialU32 >::HasDensity = false;
|
|
||||||
const bool VoxelTypeTraits< MaterialU32 >::HasMaterial = true;
|
|
||||||
const MaterialU32::DensityType VoxelTypeTraits< MaterialU32 >::MinDensity = 0;
|
|
||||||
const MaterialU32::DensityType VoxelTypeTraits< MaterialU32 >::MaxDensity = 0;
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
Copyright (c) 2005-2009 David Williams
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "PolyVoxCore/MaterialDensityPair.h"
|
|
||||||
|
|
||||||
namespace PolyVox
|
|
||||||
{
|
|
||||||
const bool VoxelTypeTraits< MaterialDensityPair44 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< MaterialDensityPair44 >::HasMaterial = true;
|
|
||||||
const MaterialDensityPair44::DensityType VoxelTypeTraits< MaterialDensityPair44 >::MinDensity = 0;
|
|
||||||
const MaterialDensityPair44::DensityType VoxelTypeTraits< MaterialDensityPair44 >::MaxDensity = 15;
|
|
||||||
|
|
||||||
const bool VoxelTypeTraits< MaterialDensityPair88 >::HasDensity = true;
|
|
||||||
const bool VoxelTypeTraits< MaterialDensityPair88 >::HasMaterial = true;
|
|
||||||
const MaterialDensityPair88::DensityType VoxelTypeTraits< MaterialDensityPair88 >::MinDensity = 0;
|
|
||||||
const MaterialDensityPair88::DensityType VoxelTypeTraits< MaterialDensityPair88 >::MaxDensity = 255;
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
Copyright (c) 2005-2009 David Williams
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#include "PolyVoxCore/Voxel.h"
|
|
||||||
|
|
||||||
namespace PolyVox
|
|
||||||
{
|
|
||||||
template<typename Type>
|
|
||||||
const bool VoxelTypeTraits<Type>::HasDensity = false;
|
|
||||||
template<typename Type>
|
|
||||||
const bool VoxelTypeTraits<Type>::HasMaterial = false;
|
|
||||||
|
|
||||||
template<typename Type>
|
|
||||||
const typename Type::DensityType VoxelTypeTraits< Type >::MinDensity = 0;
|
|
||||||
template<typename Type>
|
|
||||||
const typename Type::DensityType VoxelTypeTraits< Type >::MaxDensity = 0;
|
|
||||||
}
|
|
@ -38,43 +38,43 @@ void TestVoxels::testVoxelTypeLimits()
|
|||||||
// It's worth testing these as they are not all explictily defined (e.g. Density8 is just a
|
// It's worth testing these as they are not all explictily defined (e.g. Density8 is just a
|
||||||
// typedef of DensityI8), and in the future we might define then with bitwise magic or something.
|
// typedef of DensityI8), and in the future we might define then with bitwise magic or something.
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<Density8>::MinDensity, Density8::DensityType(0));
|
QCOMPARE(VoxelTypeTraits<Density8>::minDensity(), Density8::DensityType(0));
|
||||||
QCOMPARE(VoxelTypeTraits<Density8>::MaxDensity, Density8::DensityType(255));
|
QCOMPARE(VoxelTypeTraits<Density8>::maxDensity(), Density8::DensityType(255));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityI8>::MinDensity, DensityI8::DensityType(-127));
|
QCOMPARE(VoxelTypeTraits<DensityI8>::minDensity(), DensityI8::DensityType(-127));
|
||||||
QCOMPARE(VoxelTypeTraits<DensityI8>::MaxDensity, DensityI8::DensityType(127));
|
QCOMPARE(VoxelTypeTraits<DensityI8>::maxDensity(), DensityI8::DensityType(127));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityU8>::MinDensity, DensityU8::DensityType(0));
|
QCOMPARE(VoxelTypeTraits<DensityU8>::minDensity(), DensityU8::DensityType(0));
|
||||||
QCOMPARE(VoxelTypeTraits<DensityU8>::MaxDensity, DensityU8::DensityType(255));
|
QCOMPARE(VoxelTypeTraits<DensityU8>::maxDensity(), DensityU8::DensityType(255));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<Density16>::MinDensity, Density16::DensityType(0));
|
QCOMPARE(VoxelTypeTraits<Density16>::minDensity(), Density16::DensityType(0));
|
||||||
QCOMPARE(VoxelTypeTraits<Density16>::MaxDensity, Density16::DensityType(65535));
|
QCOMPARE(VoxelTypeTraits<Density16>::maxDensity(), Density16::DensityType(65535));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityI16>::MinDensity, DensityI16::DensityType(-32767));
|
QCOMPARE(VoxelTypeTraits<DensityI16>::minDensity(), DensityI16::DensityType(-32767));
|
||||||
QCOMPARE(VoxelTypeTraits<DensityI16>::MaxDensity, DensityI16::DensityType(32767));
|
QCOMPARE(VoxelTypeTraits<DensityI16>::maxDensity(), DensityI16::DensityType(32767));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityU16>::MinDensity, DensityU16::DensityType(0));
|
QCOMPARE(VoxelTypeTraits<DensityU16>::minDensity(), DensityU16::DensityType(0));
|
||||||
QCOMPARE(VoxelTypeTraits<DensityU16>::MaxDensity, DensityU16::DensityType(65535));
|
QCOMPARE(VoxelTypeTraits<DensityU16>::maxDensity(), DensityU16::DensityType(65535));
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityFloat>::MinDensity, FLT_MIN);
|
QCOMPARE(VoxelTypeTraits<DensityFloat>::minDensity(), FLT_MIN);
|
||||||
QCOMPARE(VoxelTypeTraits<DensityFloat>::MaxDensity, FLT_MAX);
|
QCOMPARE(VoxelTypeTraits<DensityFloat>::maxDensity(), FLT_MAX);
|
||||||
|
|
||||||
QCOMPARE(VoxelTypeTraits<DensityDouble>::MinDensity, DBL_MIN);
|
QCOMPARE(VoxelTypeTraits<DensityDouble>::minDensity(), DBL_MIN);
|
||||||
QCOMPARE(VoxelTypeTraits<DensityDouble>::MaxDensity, DBL_MAX);
|
QCOMPARE(VoxelTypeTraits<DensityDouble>::maxDensity(), DBL_MAX);
|
||||||
|
|
||||||
/*fValue = VoxelTypeTraits<DensityFloat>::MinDensity;
|
/*fValue = VoxelTypeTraits<DensityFloat>::minDensity();
|
||||||
QCOMPARE(fValue, -FLT_MAX);
|
QCOMPARE(fValue, -FLT_MAX);
|
||||||
fValue = VoxelTypeTraits<DensityFloat>::MaxDensity;
|
fValue = VoxelTypeTraits<DensityFloat>::maxDensity();
|
||||||
QCOMPARE(fValue, FLT_MAX);*/
|
QCOMPARE(fValue, FLT_MAX);*/
|
||||||
|
|
||||||
/*iValue = VoxelTypeTraits<Material8>::MinDensity;
|
/*iValue = VoxelTypeTraits<Material8>::minDensity();
|
||||||
QCOMPARE(iValue, 0);
|
QCOMPARE(iValue, 0);
|
||||||
iValue = VoxelTypeTraits<Material8>::MaxDensity;
|
iValue = VoxelTypeTraits<Material8>::maxDensity();
|
||||||
QCOMPARE(iValue, 0);*/
|
QCOMPARE(iValue, 0);*/
|
||||||
|
|
||||||
/*iValue = VoxelTypeTraits<MaterialDensityPair44>::MinDensity;
|
/*iValue = VoxelTypeTraits<MaterialDensityPair44>::minDensity();
|
||||||
QCOMPARE(iValue, 0);
|
QCOMPARE(iValue, 0);
|
||||||
iValue = VoxelTypeTraits<MaterialDensityPair44>::MaxDensity;
|
iValue = VoxelTypeTraits<MaterialDensityPair44>::maxDensity();
|
||||||
QCOMPARE(iValue, 15);*/
|
QCOMPARE(iValue, 15);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user