Refactoring work... Argh, this is hard!

This commit is contained in:
David Williams
2007-08-19 20:28:33 +00:00
parent 47bb4b016d
commit adfdb3062f
8 changed files with 129 additions and 49 deletions

View File

@ -82,7 +82,7 @@ namespace Ogre
void generateLevelVolume(void);
std::map<uchar, SurfacePatch> generateMeshDataForRegion(uint regionX, uint regionY, uint regionZ) const;
void mergeVertices6(std::vector< std::vector<SurfaceVertex> >& vertexData, std::vector< std::vector<SurfaceTriangle> >& indexData) const;
//void mergeVertices6(std::vector< std::vector<SurfaceVertex> >& vertexData, std::vector< std::vector<SurfaceTriangle> >& indexData) const;
bool verticesArePlanar3(uint uCurrentVertex, std::set<uint> setConnectedVertices, std::vector<SurfaceVertex>& vertexData) const;
void doRegionGrowing(uint xStart, uint yStart, uint zStart, uchar value);

View File

@ -1,6 +1,7 @@
#ifndef __SurfacePatch_H__
#define __SurfacePatch_H__
#include <list>
#include <vector>
#include "SurfaceVertex.h"
@ -16,12 +17,17 @@ namespace Ogre
void addTriangle(const SurfaceVertex& v0,const SurfaceVertex& v1,const SurfaceVertex& v2);
const std::vector<SurfaceVertex>& getVertexArray();
const std::vector<SurfaceTriangle>& getTriangleArray();
/*const std::vector<SurfaceVertex> getVertexArray();
const std::vector<SurfaceTriangle> getTriangleArray();*/
void getVertexAndIndexData(std::vector<SurfaceVertex>& vertexData, std::vector<uint>& indexData);
private:
std::vector<SurfaceVertex> m_vecVertices;
std::vector<SurfaceTriangle> m_vecTriangles;
std::list<SurfaceVertex> m_listVertices;
std::list<SurfaceTriangle> m_listTriangles;
std::vector<SurfaceVertex> m_vecVertexData;
std::vector<uint> m_vecIndexData;
};
}

View File

@ -15,7 +15,7 @@ namespace Ogre
SurfacePatchRenderable(const String& material = "BaseWhiteNoLighting");
~SurfacePatchRenderable(void);
void setGeometry(std::vector<SurfaceVertex> verticesToSet, std::vector<SurfaceTriangle> indicesToSet);
void setGeometry(std::vector<SurfaceVertex> verticesToSet, std::vector<uint> indicesToSet);
Real getSquaredViewDepth(const Camera *cam) const;
Real getBoundingRadius(void) const;

View File

@ -24,6 +24,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "OgreVector3.h"
#include "SurfaceVertex.h"
namespace Ogre
{
class SurfaceTriangle
@ -31,18 +33,18 @@ namespace Ogre
public:
//FIXME - maybe these should be short?
ulong v0;
/*ulong v0;
ulong v1;
ulong v2;
ulong v2;*/
std::list<SurfaceVertex>::iterator v0;
std::list<SurfaceVertex>::iterator v1;
std::list<SurfaceVertex>::iterator v2;
SurfaceTriangle()
:v0(0)
,v1(0)
,v2(0)
{
}
SurfaceTriangle(uint v0ToSet, uint v1ToSet, uint v2ToSet)
SurfaceTriangle(std::list<SurfaceVertex>::iterator v0ToSet, std::list<SurfaceVertex>::iterator v1ToSet, std::list<SurfaceVertex>::iterator v2ToSet)
:v0(v0ToSet)
,v1(v1ToSet)
,v2(v2ToSet)

View File

@ -33,6 +33,10 @@ namespace Ogre
Vector3 normal;
float alpha;
SurfaceVertex()
{
}
SurfaceVertex(Vector3 positionToSet)
:position(positionToSet)
{
@ -50,21 +54,21 @@ namespace Ogre
return ((position - rhs).length() < 0.01);
}
/*bool operator < (const Vertex& rhs) const
bool operator < (const SurfaceVertex& rhs) const
{
if(z < rhs.z)
if(position.z < rhs.position.z)
{
return true;
}
else
{
if(y < rhs.y)
if(position.y < rhs.position.y)
{
return true;
}
else
{
if(x < rhs.x)
if(position.x < rhs.position.x)
{
return true;
}
@ -74,7 +78,7 @@ namespace Ogre
}
}
}
}*/
}
};
}