This commit is contained in:
Federico Ponchio 2005-02-22 14:36:19 +00:00
parent e8ec8db1ed
commit fad0a309c2
2 changed files with 79 additions and 0 deletions

67
apps/nexus/strip.cpp Normal file
View File

@ -0,0 +1,67 @@
#include <assert.h>
//These header are neede byt tristipper...
#include <list>
#include <vector>
#include <map>
#include "tristripper/tri_stripper.h"
using namespace triangle_stripper;
#include "strip.h"
using namespace std;
using namespace nxs;
void nxs::ComputeTriStrip(unsigned short nfaces, unsigned short *faces,
vector<unsigned short> &strip) {
vector<unsigned int> index;
index.resize(nfaces*3);
for(int i = 0; i < nfaces*3; i++)
index[i] = faces[i];
int cache_size = 16;
tri_stripper stripper(index);
stripper.SetCacheSize(cache_size);
// = 0 will disable the cache optimizer
stripper.SetMinStripSize(0);
tri_stripper::primitives_vector primitives;
stripper.Strip(&primitives);
if(primitives.back().m_Indices.size() < 3)
primitives.pop_back();
//TODO do this when mounting strips together.
if(primitives.back().m_Type == tri_stripper::PT_Triangles) {
tri_stripper::primitives p;
p = primitives.back();
primitives.pop_back();
for(unsigned int i = 0; i < p.m_Indices.size(); i += 3) {
tri_stripper::primitives s;
s.m_Type = tri_stripper::PT_Triangle_Strip;
s.m_Indices.push_back(p.m_Indices[i]);
s.m_Indices.push_back(p.m_Indices[i+1]);
s.m_Indices.push_back(p.m_Indices[i+2]);
primitives.push_back(s);
}
}
for(unsigned int i = 0; i < primitives.size(); i++) {
tri_stripper::primitives &primitive = primitives[i];
assert(primitive.m_Indices.size() != 0);
int len = primitive.m_Indices.size();
for(int l = 0; l < len; l++)
strip.push_back(primitive.m_Indices[l]);
if(i < primitives.size()-1) { //not the last primitive.
strip.push_back(primitive.m_Indices[len-1]);
//TODO optimize this!
if((len%2) == 1) //do not change orientation....
strip.push_back(primitive.m_Indices[len-1]);
strip.push_back(primitives[i+1].m_Indices[0]);
}
}
}

12
apps/nexus/strip.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef NXS_TRISTRIP_H
#define NXS_TRISTRIP_H
#include <vector>
namespace nxs {
void ComputeTriStrip(unsigned short nfaces, unsigned short *faces,
std::vector<unsigned short> &strip);
}
#endif