Started getting rid of IntegrealVector3.
Also added ForwardDeclarations.h
This commit is contained in:
parent
76df5e00b5
commit
e180f67bae
@ -17,6 +17,7 @@ SET(SRC_FILES
|
||||
SET(INC_FILES
|
||||
include/Block.h
|
||||
include/Constants.h
|
||||
include/ForwardDeclarations.h
|
||||
include/IndexedSurfacePatch.h
|
||||
include/IntegralVector3.h
|
||||
include/MarchingCubesTables.h
|
||||
@ -33,7 +34,7 @@ SET(INC_FILES
|
||||
include/VolumeIterator.h
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(-DVOXEL_SCENE_MANAGER_EXPORT) #Export symbols in the .dll
|
||||
ADD_DEFINITIONS(-DPOLYVOX_EXPORT) #Export symbols in the .dll
|
||||
|
||||
#Appends "_d" to the generated library when in debug mode
|
||||
SET(CMAKE_DEBUG_POSTFIX "_d")
|
||||
|
@ -1,3 +1,4 @@
|
||||
#pragma region License
|
||||
/******************************************************************************
|
||||
This file is part of a voxel plugin for OGRE
|
||||
Copyright (C) 2006 David Williams
|
||||
@ -16,19 +17,26 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
******************************************************************************/
|
||||
#pragma endregion
|
||||
|
||||
#ifndef __Block_H__
|
||||
#define __Block_H__
|
||||
|
||||
#pragma region Standard Headers
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Boost Headers
|
||||
#include "boost/cstdint.hpp"
|
||||
#pragma endregion
|
||||
|
||||
#pragma region PolyVox Headers
|
||||
#include "Constants.h"
|
||||
|
||||
#include "TypeDef.h"
|
||||
#pragma endregion
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
|
||||
class VOXEL_SCENE_MANAGER_API Block
|
||||
class POLYVOX_API Block
|
||||
{
|
||||
//Make VolumeIterator a friend
|
||||
friend class VolumeIterator;
|
||||
|
20
include/ForwardDeclarations.h
Normal file
20
include/ForwardDeclarations.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef __ForwardDeclarations_H__
|
||||
#define __ForwardDeclarations_H__
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
class Block;
|
||||
class IndexedSurfacePatch;
|
||||
class IntegrealVector3;
|
||||
class PolyVoxSceneManager;
|
||||
class RegionGeometry;
|
||||
class SurfaceEdge;
|
||||
class SurfaceTriange;
|
||||
class SurfaceTypes;
|
||||
class SurfaceVertex;
|
||||
class Vector;
|
||||
class Volume;
|
||||
class VolumeIterator;
|
||||
}
|
||||
|
||||
#endif
|
@ -9,7 +9,6 @@
|
||||
#include <vector>
|
||||
|
||||
#include "Constants.h"
|
||||
#include "IntegralVector3.h"
|
||||
#include "SurfaceTypes.h"
|
||||
#include "SurfaceVertex.h"
|
||||
#include "TypeDef.h"
|
||||
@ -18,7 +17,7 @@
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
class VOXEL_SCENE_MANAGER_API IndexedSurfacePatch
|
||||
class POLYVOX_API IndexedSurfacePatch
|
||||
{
|
||||
public:
|
||||
IndexedSurfacePatch(bool allowDuplicateVertices);
|
||||
|
@ -46,7 +46,7 @@ namespace PolyVox
|
||||
};
|
||||
|
||||
/// Voxel scene manager
|
||||
class VOXEL_SCENE_MANAGER_API PolyVoxSceneManager
|
||||
class POLYVOX_API PolyVoxSceneManager
|
||||
{
|
||||
public:
|
||||
//Constructors, etc
|
||||
|
@ -34,7 +34,7 @@ namespace PolyVox
|
||||
bool m_bContainsSingleMaterialPatch;
|
||||
bool m_bContainsMultiMaterialPatch;
|
||||
|
||||
UIntVector3 m_v3dRegionPosition;
|
||||
Vector3DInt32 m_v3dRegionPosition;
|
||||
IndexedSurfacePatch* m_patchSingleMaterial;
|
||||
IndexedSurfacePatch* m_patchMultiMaterial;
|
||||
|
||||
|
@ -27,12 +27,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
class VOXEL_SCENE_MANAGER_API SurfaceVertex
|
||||
class POLYVOX_API SurfaceVertex
|
||||
{
|
||||
public:
|
||||
SurfaceVertex();
|
||||
SurfaceVertex(UIntVector3 positionToSet, float materialToSet, float alphaToSet);
|
||||
SurfaceVertex(UIntVector3 positionToSet, Vector3DFloat normalToSet);
|
||||
SurfaceVertex(Vector3DUint32 positionToSet, float materialToSet, float alphaToSet);
|
||||
SurfaceVertex(Vector3DUint32 positionToSet, Vector3DFloat normalToSet);
|
||||
|
||||
friend bool operator==(const SurfaceVertex& lhs, const SurfaceVertex& rhs);
|
||||
friend bool operator < (const SurfaceVertex& lhs, const SurfaceVertex& rhs);
|
||||
@ -41,7 +41,7 @@ namespace PolyVox
|
||||
const SurfaceEdgeIterator& getEdge(void) const;
|
||||
float getMaterial(void) const;
|
||||
const Vector3DFloat& getNormal(void) const;
|
||||
const UIntVector3& getPosition(void) const;
|
||||
const Vector3DUint32& getPosition(void) const;
|
||||
|
||||
void setAlpha(float alphaToSet);
|
||||
void setEdge(const SurfaceEdgeIterator& edgeToSet);
|
||||
@ -51,7 +51,7 @@ namespace PolyVox
|
||||
std::string tostring(void) const;
|
||||
|
||||
private:
|
||||
UIntVector3 position;
|
||||
Vector3DUint32 position;
|
||||
Vector3DFloat normal;
|
||||
float material;
|
||||
float alpha;
|
||||
|
35
include/TypeDef.h
Normal file
35
include/TypeDef.h
Normal file
@ -0,0 +1,35 @@
|
||||
/******************************************************************************
|
||||
This file is part of a voxel plugin for OGRE
|
||||
Copyright (C) 2006 David Williams
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
******************************************************************************/
|
||||
|
||||
//Dave, maybe make use of OgrePlatform.h instead?
|
||||
// I think use _OgreExport instead of POLYVOX_API and define OGRE_NONCLIENT_BUILD instead of POLYVOX_EXPORT?
|
||||
#ifndef __TYPEDEF_H__
|
||||
#define __TYPEDEF_H__
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef POLYVOX_EXPORT
|
||||
#define POLYVOX_API __declspec(dllexport)
|
||||
#else
|
||||
#define POLYVOX_API __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#define POLYVOX_API __attribute__ ((visibility("default")))
|
||||
#endif
|
||||
|
||||
#endif
|
@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
class VOXEL_SCENE_MANAGER_API Volume
|
||||
class POLYVOX_API Volume
|
||||
{
|
||||
//Make VolumeIterator a friend
|
||||
friend class VolumeIterator;
|
||||
|
@ -27,7 +27,7 @@ namespace PolyVox
|
||||
{
|
||||
class Volume;
|
||||
|
||||
class VOXEL_SCENE_MANAGER_API VolumeIterator
|
||||
class POLYVOX_API VolumeIterator
|
||||
{
|
||||
public:
|
||||
VolumeIterator(Volume& volume);
|
||||
|
@ -24,12 +24,12 @@ namespace PolyVox
|
||||
noOfVerticesSubmitted += 3;
|
||||
if(!m_AllowDuplicateVertices)
|
||||
{
|
||||
long int index = vertexIndices[long int(v0.getPosition().x +0.5)][long int(v0.getPosition().y +0.5)][long int(v0.getPosition().z +0.5)];
|
||||
long int index = vertexIndices[long int(v0.getPosition().x() +0.5)][long int(v0.getPosition().y() +0.5)][long int(v0.getPosition().z() +0.5)];
|
||||
if(index == -1)
|
||||
{
|
||||
m_vecVertices.push_back(v0);
|
||||
m_vecTriangleIndices.push_back(m_vecVertices.size()-1);
|
||||
vertexIndices[long int(v0.getPosition().x +0.5)][long int(v0.getPosition().y +0.5)][long int(v0.getPosition().z +0.5)] = m_vecVertices.size()-1;
|
||||
vertexIndices[long int(v0.getPosition().x() +0.5)][long int(v0.getPosition().y() +0.5)][long int(v0.getPosition().z() +0.5)] = m_vecVertices.size()-1;
|
||||
|
||||
noOfVerticesAccepted++;
|
||||
}
|
||||
@ -38,12 +38,12 @@ namespace PolyVox
|
||||
m_vecTriangleIndices.push_back(index);
|
||||
}
|
||||
|
||||
index = vertexIndices[long int(v1.getPosition().x +0.5)][long int(v1.getPosition().y +0.5)][long int(v1.getPosition().z +0.5)];
|
||||
index = vertexIndices[long int(v1.getPosition().x() +0.5)][long int(v1.getPosition().y() +0.5)][long int(v1.getPosition().z() +0.5)];
|
||||
if(index == -1)
|
||||
{
|
||||
m_vecVertices.push_back(v1);
|
||||
m_vecTriangleIndices.push_back(m_vecVertices.size()-1);
|
||||
vertexIndices[long int(v1.getPosition().x +0.5)][long int(v1.getPosition().y +0.5)][long int(v1.getPosition().z +0.5)] = m_vecVertices.size()-1;
|
||||
vertexIndices[long int(v1.getPosition().x() +0.5)][long int(v1.getPosition().y() +0.5)][long int(v1.getPosition().z() +0.5)] = m_vecVertices.size()-1;
|
||||
|
||||
noOfVerticesAccepted++;
|
||||
}
|
||||
@ -52,12 +52,12 @@ namespace PolyVox
|
||||
m_vecTriangleIndices.push_back(index);
|
||||
}
|
||||
|
||||
index = vertexIndices[long int(v2.getPosition().x +0.5)][long int(v2.getPosition().y +0.5)][long int(v2.getPosition().z +0.5)];
|
||||
index = vertexIndices[long int(v2.getPosition().x() +0.5)][long int(v2.getPosition().y() +0.5)][long int(v2.getPosition().z() +0.5)];
|
||||
if(index == -1)
|
||||
{
|
||||
m_vecVertices.push_back(v2);
|
||||
m_vecTriangleIndices.push_back(m_vecVertices.size()-1);
|
||||
vertexIndices[long int(v2.getPosition().x +0.5)][long int(v2.getPosition().y +0.5)][long int(v2.getPosition().z +0.5)] = m_vecVertices.size()-1;
|
||||
vertexIndices[long int(v2.getPosition().x() +0.5)][long int(v2.getPosition().y() +0.5)][long int(v2.getPosition().z() +0.5)] = m_vecVertices.size()-1;
|
||||
|
||||
noOfVerticesAccepted++;
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ namespace PolyVox
|
||||
RegionGeometry regionGeometry;
|
||||
regionGeometry.m_patchSingleMaterial = new IndexedSurfacePatch(false);
|
||||
regionGeometry.m_patchMultiMaterial = new IndexedSurfacePatch(true);
|
||||
regionGeometry.m_v3dRegionPosition.setData(regionX, regionY, regionZ);
|
||||
regionGeometry.m_v3dRegionPosition = Vector3DInt32(regionX, regionY, regionZ);
|
||||
|
||||
generateMeshDataForRegion(regionX,regionY,regionZ, regionGeometry.m_patchSingleMaterial, regionGeometry.m_patchMultiMaterial);
|
||||
|
||||
@ -241,9 +241,9 @@ namespace PolyVox
|
||||
const uint16_t lastZ = (std::min)(firstZ + OGRE_REGION_SIDE_LENGTH-1,static_cast<uint32_t>(OGRE_VOLUME_SIDE_LENGTH-2));
|
||||
|
||||
//Offset from lower block corner
|
||||
const UIntVector3 offset(firstX*2,firstY*2,firstZ*2);
|
||||
const Vector3DUint32 offset(firstX*2,firstY*2,firstZ*2);
|
||||
|
||||
UIntVector3 vertlist[12];
|
||||
Vector3DUint32 vertlist[12];
|
||||
uint8_t vertMaterials[12];
|
||||
VolumeIterator volIter(*volumeData);
|
||||
volIter.setValidRegion(firstX,firstY,firstZ,lastX,lastY,lastZ);
|
||||
@ -291,95 +291,95 @@ namespace PolyVox
|
||||
/* Find the vertices where the surface intersects the cube */
|
||||
if (edgeTable[iCubeIndex] & 1)
|
||||
{
|
||||
vertlist[0].x = 2*x + 1;
|
||||
vertlist[0].y = 2*y;
|
||||
vertlist[0].z = 2*z;
|
||||
vertlist[0].setX(2*x + 1);
|
||||
vertlist[0].setY(2*y);
|
||||
vertlist[0].setZ(2*z);
|
||||
vertMaterials[0] = v000 | v100; //Because one of these is 0, the or operation takes the max.
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 2)
|
||||
{
|
||||
vertlist[1].x = 2*x + 2;
|
||||
vertlist[1].y = 2*y + 1;
|
||||
vertlist[1].z = 2*z;
|
||||
vertlist[1].setX(2*x + 2);
|
||||
vertlist[1].setY(2*y + 1);
|
||||
vertlist[1].setZ(2*z);
|
||||
vertMaterials[1] = v100 | v110;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 4)
|
||||
{
|
||||
vertlist[2].x = 2*x + 1;
|
||||
vertlist[2].y = 2*y + 2;
|
||||
vertlist[2].z = 2*z;
|
||||
vertlist[2].setX(2*x + 1);
|
||||
vertlist[2].setY(2*y + 2);
|
||||
vertlist[2].setZ(2*z);
|
||||
vertMaterials[2] = v010 | v110;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 8)
|
||||
{
|
||||
vertlist[3].x = 2*x;
|
||||
vertlist[3].y = 2*y + 1;
|
||||
vertlist[3].z = 2*z;
|
||||
vertlist[3].setX(2*x);
|
||||
vertlist[3].setY(2*y + 1);
|
||||
vertlist[3].setZ(2*z);
|
||||
vertMaterials[3] = v000 | v010;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 16)
|
||||
{
|
||||
vertlist[4].x = 2*x + 1;
|
||||
vertlist[4].y = 2*y;
|
||||
vertlist[4].z = 2*z + 2;
|
||||
vertlist[4].setX(2*x + 1);
|
||||
vertlist[4].setY(2*y);
|
||||
vertlist[4].setZ(2*z + 2);
|
||||
vertMaterials[4] = v001 | v101;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 32)
|
||||
{
|
||||
vertlist[5].x = 2*x + 2;
|
||||
vertlist[5].y = 2*y + 1;
|
||||
vertlist[5].z = 2*z + 2;
|
||||
vertlist[5].setX(2*x + 2);
|
||||
vertlist[5].setY(2*y + 1);
|
||||
vertlist[5].setZ(2*z + 2);
|
||||
vertMaterials[5] = v101 | v111;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 64)
|
||||
{
|
||||
vertlist[6].x = 2*x + 1;
|
||||
vertlist[6].y = 2*y + 2;
|
||||
vertlist[6].z = 2*z + 2;
|
||||
vertlist[6].setX(2*x + 1);
|
||||
vertlist[6].setY(2*y + 2);
|
||||
vertlist[6].setZ(2*z + 2);
|
||||
vertMaterials[6] = v011 | v111;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 128)
|
||||
{
|
||||
vertlist[7].x = 2*x;
|
||||
vertlist[7].y = 2*y + 1;
|
||||
vertlist[7].z = 2*z + 2;
|
||||
vertlist[7].setX(2*x);
|
||||
vertlist[7].setY(2*y + 1);
|
||||
vertlist[7].setZ(2*z + 2);
|
||||
vertMaterials[7] = v001 | v011;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 256)
|
||||
{
|
||||
vertlist[8].x = 2*x;
|
||||
vertlist[8].y = 2*y;
|
||||
vertlist[8].z = 2*z + 1;
|
||||
vertlist[8].setX(2*x);
|
||||
vertlist[8].setY(2*y);
|
||||
vertlist[8].setZ(2*z + 1);
|
||||
vertMaterials[8] = v000 | v001;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 512)
|
||||
{
|
||||
vertlist[9].x = 2*x + 2;
|
||||
vertlist[9].y = 2*y;
|
||||
vertlist[9].z = 2*z + 1;
|
||||
vertlist[9].setX(2*x + 2);
|
||||
vertlist[9].setY(2*y);
|
||||
vertlist[9].setZ(2*z + 1);
|
||||
vertMaterials[9] = v100 | v101;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 1024)
|
||||
{
|
||||
vertlist[10].x = 2*x + 2;
|
||||
vertlist[10].y = 2*y + 2;
|
||||
vertlist[10].z = 2*z + 1;
|
||||
vertlist[10].setX(2*x + 2);
|
||||
vertlist[10].setY(2*y + 2);
|
||||
vertlist[10].setZ(2*z + 1);
|
||||
vertMaterials[10] = v110 | v111;
|
||||
}
|
||||
if (edgeTable[iCubeIndex] & 2048)
|
||||
{
|
||||
vertlist[11].x = 2*x;
|
||||
vertlist[11].y = 2*y + 2;
|
||||
vertlist[11].z = 2*z + 1;
|
||||
vertlist[11].setX(2*x);
|
||||
vertlist[11].setY(2*y + 2);
|
||||
vertlist[11].setZ(2*z + 1);
|
||||
vertMaterials[11] = v010 | v011;
|
||||
}
|
||||
|
||||
for (int i=0;triTable[iCubeIndex][i]!=-1;i+=3)
|
||||
{
|
||||
//The three vertices forming a triangle
|
||||
const UIntVector3 vertex0 = vertlist[triTable[iCubeIndex][i ]] - offset;
|
||||
const UIntVector3 vertex1 = vertlist[triTable[iCubeIndex][i+1]] - offset;
|
||||
const UIntVector3 vertex2 = vertlist[triTable[iCubeIndex][i+2]] - offset;
|
||||
const Vector3DUint32 vertex0 = vertlist[triTable[iCubeIndex][i ]] - offset;
|
||||
const Vector3DUint32 vertex1 = vertlist[triTable[iCubeIndex][i+1]] - offset;
|
||||
const Vector3DUint32 vertex2 = vertlist[triTable[iCubeIndex][i+2]] - offset;
|
||||
|
||||
const uint8_t material0 = vertMaterials[triTable[iCubeIndex][i ]];
|
||||
const uint8_t material1 = vertMaterials[triTable[iCubeIndex][i+1]];
|
||||
@ -507,7 +507,7 @@ namespace PolyVox
|
||||
std::vector<SurfaceVertex>::iterator iterSurfaceVertex = singleMaterialPatch->m_vecVertices.begin();
|
||||
while(iterSurfaceVertex != singleMaterialPatch->m_vecVertices.end())
|
||||
{
|
||||
Vector3DFloat tempNormal = computeNormal((iterSurfaceVertex->getPosition() + offset).toVector3DFloat()/2.0f, CENTRAL_DIFFERENCE);
|
||||
Vector3DFloat tempNormal = computeNormal(static_cast<Vector3DFloat>(iterSurfaceVertex->getPosition() + offset)/2.0f, CENTRAL_DIFFERENCE);
|
||||
const_cast<SurfaceVertex&>(*iterSurfaceVertex).setNormal(tempNormal);
|
||||
++iterSurfaceVertex;
|
||||
}
|
||||
@ -515,7 +515,7 @@ namespace PolyVox
|
||||
iterSurfaceVertex = multiMaterialPatch->m_vecVertices.begin();
|
||||
while(iterSurfaceVertex != multiMaterialPatch->m_vecVertices.end())
|
||||
{
|
||||
Vector3DFloat tempNormal = computeNormal((iterSurfaceVertex->getPosition() + offset).toVector3DFloat()/2.0f, CENTRAL_DIFFERENCE);
|
||||
Vector3DFloat tempNormal = computeNormal(static_cast<Vector3DFloat>(iterSurfaceVertex->getPosition() + offset)/2.0f, CENTRAL_DIFFERENCE);
|
||||
const_cast<SurfaceVertex&>(*iterSurfaceVertex).setNormal(tempNormal);
|
||||
++iterSurfaceVertex;
|
||||
}
|
||||
|
@ -11,20 +11,20 @@ namespace PolyVox
|
||||
{
|
||||
}
|
||||
|
||||
SurfaceVertex::SurfaceVertex(UIntVector3 positionToSet, float materialToSet, float alphaToSet)
|
||||
SurfaceVertex::SurfaceVertex(Vector3DUint32 positionToSet, float materialToSet, float alphaToSet)
|
||||
:material(materialToSet)
|
||||
,alpha(alphaToSet)
|
||||
,position(positionToSet)
|
||||
,m_uHash((position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.z))
|
||||
,m_uHash((position.x()*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.y()*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.z()))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SurfaceVertex::SurfaceVertex(UIntVector3 positionToSet, Vector3DFloat normalToSet)
|
||||
SurfaceVertex::SurfaceVertex(Vector3DUint32 positionToSet, Vector3DFloat normalToSet)
|
||||
:position(positionToSet)
|
||||
,normal(normalToSet)
|
||||
{
|
||||
m_uHash = (position.x*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.y*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.z);
|
||||
m_uHash = (position.x()*(OGRE_REGION_SIDE_LENGTH*2+1)*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.y()*(OGRE_REGION_SIDE_LENGTH*2+1)) + (position.z());
|
||||
}
|
||||
|
||||
float SurfaceVertex::getAlpha(void) const
|
||||
@ -47,7 +47,7 @@ namespace PolyVox
|
||||
return normal;
|
||||
}
|
||||
|
||||
const UIntVector3& SurfaceVertex::getPosition(void) const
|
||||
const Vector3DUint32& SurfaceVertex::getPosition(void) const
|
||||
{
|
||||
return position;
|
||||
}
|
||||
@ -76,7 +76,7 @@ namespace PolyVox
|
||||
std::string SurfaceVertex::tostring(void) const
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "SurfaceVertex: Position = (" << position.x << "," << position.y << "," << position.z << "), Normal = " << normal;
|
||||
ss << "SurfaceVertex: Position = (" << position.x() << "," << position.y() << "," << position.z() << "), Normal = " << normal;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
@ -264,57 +264,57 @@ namespace PolyVox
|
||||
return; //FIXME - Error message? Exception?
|
||||
}
|
||||
|
||||
std::queue<UIntVector3> seeds;
|
||||
seeds.push(UIntVector3(xStart,yStart,zStart));
|
||||
std::queue<Vector3DUint32> seeds;
|
||||
seeds.push(Vector3DUint32(xStart,yStart,zStart));
|
||||
|
||||
while(!seeds.empty())
|
||||
{
|
||||
UIntVector3 currentSeed = seeds.front();
|
||||
Vector3DUint32 currentSeed = seeds.front();
|
||||
seeds.pop();
|
||||
|
||||
//std::cout << "x = " << currentSeed.x << " y = " << currentSeed.y << " z = " << currentSeed.z << std::endl;
|
||||
|
||||
//FIXME - introduce 'safe' function which tests this?
|
||||
if((currentSeed.x > OGRE_VOLUME_SIDE_LENGTH-2) || (currentSeed.y > OGRE_VOLUME_SIDE_LENGTH-2) || (currentSeed.z > OGRE_VOLUME_SIDE_LENGTH-2)
|
||||
|| (currentSeed.x < 1) || (currentSeed.y < 1) || (currentSeed.z < 1))
|
||||
if((currentSeed.x() > OGRE_VOLUME_SIDE_LENGTH-2) || (currentSeed.y() > OGRE_VOLUME_SIDE_LENGTH-2) || (currentSeed.z() > OGRE_VOLUME_SIDE_LENGTH-2)
|
||||
|| (currentSeed.x() < 1) || (currentSeed.y() < 1) || (currentSeed.z() < 1))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x, currentSeed.y, currentSeed.z+1) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x(), currentSeed.y(), currentSeed.z()+1) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x, currentSeed.y, currentSeed.z+1, value);
|
||||
seeds.push(UIntVector3(currentSeed.x, currentSeed.y, currentSeed.z+1));
|
||||
volIter.setVoxelAt(currentSeed.x(), currentSeed.y(), currentSeed.z()+1, value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x(), currentSeed.y(), currentSeed.z()+1));
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x, currentSeed.y, currentSeed.z-1) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x(), currentSeed.y(), currentSeed.z()-1) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x, currentSeed.y, currentSeed.z-1, value);
|
||||
seeds.push(UIntVector3(currentSeed.x, currentSeed.y, currentSeed.z-1));
|
||||
volIter.setVoxelAt(currentSeed.x(), currentSeed.y(), currentSeed.z()-1, value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x(), currentSeed.y(), currentSeed.z()-1));
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x, currentSeed.y+1, currentSeed.z) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x(), currentSeed.y()+1, currentSeed.z()) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x, currentSeed.y+1, currentSeed.z, value);
|
||||
seeds.push(UIntVector3(currentSeed.x, currentSeed.y+1, currentSeed.z));
|
||||
volIter.setVoxelAt(currentSeed.x(), currentSeed.y()+1, currentSeed.z(), value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x(), currentSeed.y()+1, currentSeed.z()));
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x, currentSeed.y-1, currentSeed.z) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x(), currentSeed.y()-1, currentSeed.z()) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x, currentSeed.y-1, currentSeed.z, value);
|
||||
seeds.push(UIntVector3(currentSeed.x, currentSeed.y-1, currentSeed.z));
|
||||
volIter.setVoxelAt(currentSeed.x(), currentSeed.y()-1, currentSeed.z(), value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x(), currentSeed.y()-1, currentSeed.z()));
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x+1, currentSeed.y, currentSeed.z) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x()+1, currentSeed.y(), currentSeed.z()) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x+1, currentSeed.y, currentSeed.z, value);
|
||||
seeds.push(UIntVector3(currentSeed.x+1, currentSeed.y, currentSeed.z));
|
||||
volIter.setVoxelAt(currentSeed.x()+1, currentSeed.y(), currentSeed.z(), value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x()+1, currentSeed.y(), currentSeed.z()));
|
||||
}
|
||||
|
||||
if(volIter.getVoxelAt(currentSeed.x-1, currentSeed.y, currentSeed.z) == uSeedValue)
|
||||
if(volIter.getVoxelAt(currentSeed.x()-1, currentSeed.y(), currentSeed.z()) == uSeedValue)
|
||||
{
|
||||
volIter.setVoxelAt(currentSeed.x-1, currentSeed.y, currentSeed.z, value);
|
||||
seeds.push(UIntVector3(currentSeed.x-1, currentSeed.y, currentSeed.z));
|
||||
volIter.setVoxelAt(currentSeed.x()-1, currentSeed.y(), currentSeed.z(), value);
|
||||
seeds.push(Vector3DUint32(currentSeed.x()-1, currentSeed.y(), currentSeed.z()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user