Smooth Levels of Detail
Programming Reference
Heinrich Hey
Bitstream & Packet Tags (Slod.h)
11110 header packet
11111 end packet
0 vertex packet
10 triangle packet
110 multi triangle packet
1110 extended packet
class SlodBitstream{
public:
SlodBitstream* next;
Unsigned32 noByte;
Unsigned8* byteList;
void deleteBitstream();
};
Brep (Slod.h)
typedef Vector3D SlodVertex;
struct SlodTriangle{
Unsigned32 vertexNo[4];
};
struct SlodColor{
Float32 r,g,b;
};
typedef Vector3D SlodNormal;
struct SlodTextureCoord{
Vector2D textureCoord[3];
};
struct SlodTexel{
Unsigned8 r,g,b;
};
class SlodBrep{
public:
SlodVertex* vertexList;
Unsigned32 noVertices;
SlodTriangle* triangleList;
Unsigned32 noTriangles;
SlodColor* colorList;
Unsigned32 colorType;
#define slodBrepNoColor 0
#define slodBrepUniformColor 1
#define slodBrepColorPerVertex 2
SlodNormal* normalList;
Boolean withNormals;
SlodTextureCoord* textureCoordList;
Boolean textured;
Unsigned32 textureSizeX,
textureSizeY;
SlodTexel* texture;
SlodBrep();
void deleteLists();
//get copy of brep corresponding to current lod
SlodBrep* copyBrep();
};
Encoder (SlodEncoder.h, SlodEncoderIv.h)
class SlodEncoder{
public:
SlodEncoder();
~SlodEncoder();
//set brep to encode from
void setBrep(SlodBrep& brep_);
//encode brep to clustertree
void generateClusterTree();
//init decoder with brep, clustertree, parentclusterlist,
//generate clustertree if not already done
void initDecoder(SlodDecoder* decoder);
//encode clustertree to bitstream with max. no. byte per bitstreampart,
//generate clustertree if not already done
SlodBitstream* getBitstream(Unsigned32 maxNoByte);
};
class SlodEncoderIv:public SlodEncoder{
public:
~SlodEncoderIv();
//set inventor object to encode from
//returns if successfull
Boolean setIvObject(SoSeparator* object);
};
Decoder (SlodDecoder.h, SlodDecoderIv.h)
class SlodDecoder{
public:
SlodDecoder();
~SlodDecoder();
//reset to empty bitstream, brep, clustertree
void reset();
//add bitstream to undecoded bitstream
void addBitstream(SlodBitstream* bitstream);
//decode all bitstream information into cluster tree
void decodeBitstream();
//decode bitstream up to max no. bit
void decodeBitstream(Unsigned32 maxNoBit);
//get internal cluster tree
SlodDecoderCluster* getClusterTree();
//get brep to currently selected lod
SlodBrep* getBrep();
//get no. triangles of original object
Unsigned32 getMaxNoTriangles();
//get no. triangles decoded so far
Unsigned32 getAvailableNoTriangles();
//set & get lod to no. triangles available
Unsigned32 setAvailableNoTriangles();
//set & get no. triangles or no. triangles available
Unsigned32 setNoTriangles(Unsigned32 desiredNoTriangles);
//increase/decrease & get no. triangles
Unsigned32 changeNoTriangles(Unsigned32 deltaNoTriangles);
//get currently selected no. triangles
Unsigned32 getNoTriangles();
//set min parent cluster size
void setMinParentClusterSize(Float32 size);
//get currently selected min parent cluster size
Float32 getMinParentClusterSize();
};
class SlodDecoderIv:public SlodDecoder{
public:
SlodDecoderIv();
~SlodDecoderIv();
//get internal inventor object
SoSeparator* getIvObject();
};
© Heinrich Hey