SurfaceExtractor no longer flags region and material edges.
Region/material edges no longer stored as vertex flags. Replaced addCubicTriangle with addTriangle.
This commit is contained in:
parent
3205ce6c30
commit
9310c97333
@ -90,13 +90,13 @@ namespace PolyVox
|
|||||||
|
|
||||||
if(currentVoxelIsSolid > negXVoxelIsSolid)
|
if(currentVoxelIsSolid > negXVoxelIsSolid)
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,13 +114,13 @@ namespace PolyVox
|
|||||||
|
|
||||||
if(currentVoxelIsSolid > negYVoxelIsSolid)
|
if(currentVoxelIsSolid > negYVoxelIsSolid)
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,13 +138,13 @@ namespace PolyVox
|
|||||||
|
|
||||||
if(currentVoxelIsSolid > negZVoxelIsSolid)
|
if(currentVoxelIsSolid > negZVoxelIsSolid)
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,8 +67,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(1.0f, 0.0f, 0.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(1.0f, 0.0f, 0.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(1.0f, 0.0f, 0.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(1.0f, 0.0f, 0.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
if(currentVoxel < plusXVoxel)
|
if(currentVoxel < plusXVoxel)
|
||||||
{
|
{
|
||||||
@ -79,8 +79,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(-1.0f, 0.0f, 0.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(-1.0f, 0.0f, 0.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(-1.0f, 0.0f, 0.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(-1.0f, 0.0f, 0.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
int plusYVoxel = m_volData->getVoxelAt(x,y+1,z).getDensity() >= VoxelType::getThreshold();
|
int plusYVoxel = m_volData->getVoxelAt(x,y+1,z).getDensity() >= VoxelType::getThreshold();
|
||||||
@ -93,8 +93,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(0.0f, 1.0f, 0.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(0.0f, 1.0f, 0.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 1.0f, 0.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 1.0f, 0.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
if(currentVoxel < plusYVoxel)
|
if(currentVoxel < plusYVoxel)
|
||||||
{
|
{
|
||||||
@ -105,8 +105,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(0.0f, -1.0f, 0.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ - 0.5f), Vector3DFloat(0.0f, -1.0f, 0.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, -1.0f, 0.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, -1.0f, 0.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
|
|
||||||
int plusZVoxel = m_volData->getVoxelAt(x,y,z+1).getDensity() >= VoxelType::getThreshold();
|
int plusZVoxel = m_volData->getVoxelAt(x,y,z+1).getDensity() >= VoxelType::getThreshold();
|
||||||
@ -119,8 +119,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY - 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, 1.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY - 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, 1.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, 1.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, 1.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v2,v1);
|
m_meshCurrent->addTriangle(v0,v2,v1);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v2,v3);
|
m_meshCurrent->addTriangle(v1,v2,v3);
|
||||||
}
|
}
|
||||||
if(currentVoxel < plusZVoxel)
|
if(currentVoxel < plusZVoxel)
|
||||||
{
|
{
|
||||||
@ -131,8 +131,8 @@ namespace PolyVox
|
|||||||
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY - 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, -1.0f), material));
|
uint32_t v2 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY - 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, -1.0f), material));
|
||||||
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, -1.0f), material));
|
uint32_t v3 = m_meshCurrent->addVertex(PositionMaterialNormal(Vector3DFloat(regX + 0.5f, regY + 0.5f, regZ + 0.5f), Vector3DFloat(0.0f, 0.0f, -1.0f), material));
|
||||||
|
|
||||||
m_meshCurrent->addTriangleCubic(v0,v1,v2);
|
m_meshCurrent->addTriangle(v0,v1,v2);
|
||||||
m_meshCurrent->addTriangleCubic(v1,v3,v2);
|
m_meshCurrent->addTriangle(v1,v3,v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -402,25 +402,16 @@ namespace PolyVox
|
|||||||
{
|
{
|
||||||
int16_t iZVolSpace = m_regSliceCurrent.getLowerCorner().getZ();
|
int16_t iZVolSpace = m_regSliceCurrent.getLowerCorner().getZ();
|
||||||
const uint16_t uZRegSpace = iZVolSpace - m_regSizeInVoxels.getLowerCorner().getZ();
|
const uint16_t uZRegSpace = iZVolSpace - m_regSizeInVoxels.getLowerCorner().getZ();
|
||||||
//bool isZEdge = ((iZVolSpace == m_regSizeInVoxelsCropped.getLowerCorner().getZ()) || (iZVolSpace == m_regSizeInVoxelsCropped.getUpperCorner().getZ()));
|
|
||||||
bool isNegZEdge = (iZVolSpace == m_regSizeInVoxels.getLowerCorner().getZ());
|
|
||||||
bool isPosZEdge = (iZVolSpace == m_regSizeInVoxels.getUpperCorner().getZ());
|
|
||||||
|
|
||||||
//Iterate over each cell in the region
|
//Iterate over each cell in the region
|
||||||
for(int16_t iYVolSpace = m_regSliceCurrent.getLowerCorner().getY(); iYVolSpace <= m_regSliceCurrent.getUpperCorner().getY(); iYVolSpace++)
|
for(int16_t iYVolSpace = m_regSliceCurrent.getLowerCorner().getY(); iYVolSpace <= m_regSliceCurrent.getUpperCorner().getY(); iYVolSpace++)
|
||||||
{
|
{
|
||||||
const uint16_t uYRegSpace = iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY();
|
const uint16_t uYRegSpace = iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY();
|
||||||
//bool isYEdge = ((iYVolSpace == m_regSizeInVoxelsCropped.getLowerCorner().getY()) || (iYVolSpace == m_regSizeInVoxelsCropped.getUpperCorner().getY()));
|
|
||||||
bool isNegYEdge = (iYVolSpace == m_regSizeInVoxels.getLowerCorner().getY());
|
|
||||||
bool isPosYEdge = (iYVolSpace == m_regSizeInVoxels.getUpperCorner().getY());
|
|
||||||
|
|
||||||
for(int16_t iXVolSpace = m_regSliceCurrent.getLowerCorner().getX(); iXVolSpace <= m_regSliceCurrent.getUpperCorner().getX(); iXVolSpace++)
|
for(int16_t iXVolSpace = m_regSliceCurrent.getLowerCorner().getX(); iXVolSpace <= m_regSliceCurrent.getUpperCorner().getX(); iXVolSpace++)
|
||||||
{
|
{
|
||||||
//Current position
|
//Current position
|
||||||
const uint16_t uXRegSpace = iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX();
|
const uint16_t uXRegSpace = iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX();
|
||||||
//bool isXEdge = ((iXVolSpace == m_regSizeInVoxelsCropped.getLowerCorner().getX()) || (iXVolSpace == m_regSizeInVoxelsCropped.getUpperCorner().getX()));
|
|
||||||
bool isNegXEdge = (iXVolSpace == m_regSizeInVoxels.getLowerCorner().getX());
|
|
||||||
bool isPosXEdge = (iXVolSpace == m_regSizeInVoxels.getUpperCorner().getX());
|
|
||||||
|
|
||||||
//Determine the index into the edge table which tells us which vertices are inside of the surface
|
//Determine the index into the edge table which tells us which vertices are inside of the surface
|
||||||
uint8_t iCubeIndex = pCurrentBitmask[uXRegSpace][uYRegSpace];
|
uint8_t iCubeIndex = pCurrentBitmask[uXRegSpace][uYRegSpace];
|
||||||
@ -458,13 +449,6 @@ namespace PolyVox
|
|||||||
const uint8_t uMaterial = v000.getMaterial() | v100.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
const uint8_t uMaterial = v000.getMaterial() | v100.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
||||||
|
|
||||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
||||||
//surfaceVertex.setOnGeometryEdge(isXEdge || isYEdge || isZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegX(isNegXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosX(isPosXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegY(isNegYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosY(isPosYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegZ(isNegZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
|
|
||||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||||
m_pCurrentVertexIndicesX[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
m_pCurrentVertexIndicesX[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
||||||
|
|
||||||
@ -488,13 +472,6 @@ namespace PolyVox
|
|||||||
const uint8_t uMaterial = v000.getMaterial() | v010.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
const uint8_t uMaterial = v000.getMaterial() | v010.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
||||||
|
|
||||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
||||||
//surfaceVertex.setOnGeometryEdge(isXEdge || isYEdge || isZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegX(isNegXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosX(isPosXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegY(isNegYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosY(isPosYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegZ(isNegZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
|
|
||||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||||
m_pCurrentVertexIndicesY[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
m_pCurrentVertexIndicesY[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
||||||
|
|
||||||
@ -518,13 +495,6 @@ namespace PolyVox
|
|||||||
const uint8_t uMaterial = v000.getMaterial() | v001.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
const uint8_t uMaterial = v000.getMaterial() | v001.getMaterial(); //Because one of these is 0, the or operation takes the max.
|
||||||
|
|
||||||
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
PositionMaterialNormal surfaceVertex(v3dPosition, v3dNormal, uMaterial);
|
||||||
//surfaceVertex.setOnGeometryEdge(isXEdge || isYEdge || isZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegX(isNegXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosX(isPosXEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegY(isNegYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosY(isPosYEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgeNegZ(isNegZEdge);
|
|
||||||
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
|
|
||||||
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
|
||||||
m_pCurrentVertexIndicesZ[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
m_pCurrentVertexIndicesZ[iXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][iYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
|
||||||
|
|
||||||
|
@ -58,7 +58,6 @@ namespace PolyVox
|
|||||||
const std::vector<VertexType>& getVertices(void) const;
|
const std::vector<VertexType>& getVertices(void) const;
|
||||||
|
|
||||||
void addTriangle(uint32_t index0, uint32_t index1, uint32_t index2);
|
void addTriangle(uint32_t index0, uint32_t index1, uint32_t index2);
|
||||||
void addTriangleCubic(uint32_t index0, uint32_t index1, uint32_t index2);
|
|
||||||
uint32_t addVertex(const VertexType& vertex);
|
uint32_t addVertex(const VertexType& vertex);
|
||||||
void clear(void);
|
void clear(void);
|
||||||
const bool isEmpty(void) const;
|
const bool isEmpty(void) const;
|
||||||
@ -85,11 +84,6 @@ namespace PolyVox
|
|||||||
std::vector<VertexType> m_vecVertices;
|
std::vector<VertexType> m_vecVertices;
|
||||||
|
|
||||||
std::vector<LodRecord> m_vecLodRecords;
|
std::vector<LodRecord> m_vecLodRecords;
|
||||||
|
|
||||||
//The set of materials which are in this mesh. Only those materials
|
|
||||||
//which cover a whole triangle are counted. Materials which only
|
|
||||||
//exist on a material boundary do not count.
|
|
||||||
std::set<uint8_t> m_mapUsedMaterials;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,25 +105,6 @@ namespace PolyVox
|
|||||||
|
|
||||||
template <typename VertexType>
|
template <typename VertexType>
|
||||||
void SurfaceMesh<VertexType>::addTriangle(uint32_t index0, uint32_t index1, uint32_t index2)
|
void SurfaceMesh<VertexType>::addTriangle(uint32_t index0, uint32_t index1, uint32_t index2)
|
||||||
{
|
|
||||||
m_vecTriangleIndices.push_back(index0);
|
|
||||||
m_vecTriangleIndices.push_back(index1);
|
|
||||||
m_vecTriangleIndices.push_back(index2);
|
|
||||||
|
|
||||||
if((m_vecVertices[index0].material == m_vecVertices[index1].material) && (m_vecVertices[index0].material == m_vecVertices[index2].material))
|
|
||||||
{
|
|
||||||
m_mapUsedMaterials.insert(m_vecVertices[index0].material);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_vecVertices[index0].setOnMaterialEdge(true);
|
|
||||||
m_vecVertices[index1].setOnMaterialEdge(true);
|
|
||||||
m_vecVertices[index2].setOnMaterialEdge(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VertexType>
|
|
||||||
void SurfaceMesh<VertexType>::addTriangleCubic(uint32_t index0, uint32_t index1, uint32_t index2)
|
|
||||||
{
|
{
|
||||||
m_vecTriangleIndices.push_back(index0);
|
m_vecTriangleIndices.push_back(index0);
|
||||||
m_vecTriangleIndices.push_back(index1);
|
m_vecTriangleIndices.push_back(index1);
|
||||||
@ -143,7 +124,6 @@ namespace PolyVox
|
|||||||
m_vecVertices.clear();
|
m_vecVertices.clear();
|
||||||
m_vecTriangleIndices.clear();
|
m_vecTriangleIndices.clear();
|
||||||
m_vecLodRecords.clear();
|
m_vecLodRecords.clear();
|
||||||
m_mapUsedMaterials.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexType>
|
template <typename VertexType>
|
||||||
|
@ -32,18 +32,6 @@ freely, subject to the following restrictions:
|
|||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
enum POLYVOXCORE_API VertexFlags
|
|
||||||
{
|
|
||||||
VF_ON_MATERIAL_EDGE,
|
|
||||||
VF_ON_GEOMETRY_EDGE_NEG_X,
|
|
||||||
VF_ON_GEOMETRY_EDGE_POS_X ,
|
|
||||||
VF_ON_GEOMETRY_EDGE_NEG_Y ,
|
|
||||||
VF_ON_GEOMETRY_EDGE_POS_Y ,
|
|
||||||
VF_ON_GEOMETRY_EDGE_NEG_Z ,
|
|
||||||
VF_ON_GEOMETRY_EDGE_POS_Z,
|
|
||||||
VF_NO_OF_FLAGS
|
|
||||||
};
|
|
||||||
|
|
||||||
class POLYVOXCORE_API PositionMaterial
|
class POLYVOXCORE_API PositionMaterial
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -56,6 +44,7 @@ namespace PolyVox
|
|||||||
void setMaterial(float materialToSet);
|
void setMaterial(float materialToSet);
|
||||||
void setPosition(const Vector3DFloat& positionToSet);
|
void setPosition(const Vector3DFloat& positionToSet);
|
||||||
public:
|
public:
|
||||||
|
//Nicely fits into four floats.
|
||||||
Vector3DFloat position;
|
Vector3DFloat position;
|
||||||
float material;
|
float material;
|
||||||
};
|
};
|
||||||
@ -70,34 +59,17 @@ namespace PolyVox
|
|||||||
float getMaterial(void) const;
|
float getMaterial(void) const;
|
||||||
const Vector3DFloat& getNormal(void) const;
|
const Vector3DFloat& getNormal(void) const;
|
||||||
const Vector3DFloat& getPosition(void) const;
|
const Vector3DFloat& getPosition(void) const;
|
||||||
//unsigned int getNoOfGeometryEdges(void) const;
|
|
||||||
|
|
||||||
bool isOnEdge(void) const;
|
|
||||||
bool isOnGeometryEdge(void) const;
|
|
||||||
bool isOnGeometryEdgeNegX(void) const;
|
|
||||||
bool isOnGeometryEdgePosX(void) const;
|
|
||||||
bool isOnGeometryEdgeNegY(void) const;
|
|
||||||
bool isOnGeometryEdgePosY(void) const;
|
|
||||||
bool isOnGeometryEdgeNegZ(void) const;
|
|
||||||
bool isOnGeometryEdgePosZ(void) const;
|
|
||||||
bool isOnMaterialEdge(void) const;
|
|
||||||
|
|
||||||
void setMaterial(float materialToSet);
|
void setMaterial(float materialToSet);
|
||||||
void setNormal(const Vector3DFloat& normalToSet);
|
void setNormal(const Vector3DFloat& normalToSet);
|
||||||
void setOnGeometryEdgeNegX(bool bOnRegionEdge);
|
|
||||||
void setOnGeometryEdgePosX(bool bOnRegionEdge);
|
|
||||||
void setOnGeometryEdgeNegY(bool bOnRegionEdge);
|
|
||||||
void setOnGeometryEdgePosY(bool bOnRegionEdge);
|
|
||||||
void setOnGeometryEdgeNegZ(bool bOnRegionEdge);
|
|
||||||
void setOnGeometryEdgePosZ(bool bOnRegionEdge);
|
|
||||||
void setOnMaterialEdge(bool bOnMaterialEdge);
|
|
||||||
void setPosition(const Vector3DFloat& positionToSet);
|
void setPosition(const Vector3DFloat& positionToSet);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//Nicely fits into seven floats, meaning we
|
||||||
|
//can squeeze in one more for material blending.
|
||||||
Vector3DFloat position;
|
Vector3DFloat position;
|
||||||
Vector3DFloat normal;
|
Vector3DFloat normal;
|
||||||
float material; //FIXME: This shouldn't be float on CPU?
|
float material; //FIXME: This shouldn't be float on CPU?
|
||||||
std::bitset<VF_NO_OF_FLAGS> m_bFlags;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,63 +60,6 @@ namespace PolyVox
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Returns a value between 0-3, for how many geometry edges (X,Y,Z) this vertex is on.
|
|
||||||
/*unsigned int PositionMaterialNormal::getNoOfGeometryEdges(void) const
|
|
||||||
{
|
|
||||||
unsigned int uIsOnEdgeX = static_cast<unsigned int>(isOnGeometryEdgeX());
|
|
||||||
unsigned int uIsOnEdgeY = static_cast<unsigned int>(isOnGeometryEdgeY());
|
|
||||||
unsigned int uIsOnEdgeZ = static_cast<unsigned int>(isOnGeometryEdgeZ());
|
|
||||||
return uIsOnEdgeX + uIsOnEdgeY + uIsOnEdgeZ;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnEdge(void) const
|
|
||||||
{
|
|
||||||
return (isOnMaterialEdge() || isOnGeometryEdge());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnMaterialEdge(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_MATERIAL_EDGE];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdge(void) const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
m_bFlags [VF_ON_GEOMETRY_EDGE_NEG_X] || m_bFlags[VF_ON_GEOMETRY_EDGE_POS_X] ||
|
|
||||||
m_bFlags [VF_ON_GEOMETRY_EDGE_NEG_Y] || m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Y] ||
|
|
||||||
m_bFlags [VF_ON_GEOMETRY_EDGE_NEG_Z] || m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Z];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgeNegX(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_X];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgePosX(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_POS_X];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgeNegY(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_Y];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgePosY(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Y];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgeNegZ(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_Z];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PositionMaterialNormal::isOnGeometryEdgePosZ(void) const
|
|
||||||
{
|
|
||||||
return m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Z];
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setMaterial(float materialToSet)
|
void PositionMaterialNormal::setMaterial(float materialToSet)
|
||||||
{
|
{
|
||||||
material = materialToSet;
|
material = materialToSet;
|
||||||
@ -127,41 +70,6 @@ namespace PolyVox
|
|||||||
normal = normalToSet;
|
normal = normalToSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnMaterialEdge(bool bOnMaterialEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_MATERIAL_EDGE] = bOnMaterialEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgeNegX(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_X] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgePosX(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_POS_X] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgeNegY(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_Y] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgePosY(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Y] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgeNegZ(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_NEG_Z] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setOnGeometryEdgePosZ(bool bOnRegionEdge)
|
|
||||||
{
|
|
||||||
m_bFlags[VF_ON_GEOMETRY_EDGE_POS_Z] = bOnRegionEdge;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PositionMaterialNormal::setPosition(const Vector3DFloat& positionToSet)
|
void PositionMaterialNormal::setPosition(const Vector3DFloat& positionToSet)
|
||||||
{
|
{
|
||||||
position = positionToSet;
|
position = positionToSet;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user