89 lines
2.2 KiB
C++
89 lines
2.2 KiB
C++
#ifndef G3D_Welder_h
|
|
#define G3D_Welder_h
|
|
|
|
#include "G3D/platform.h"
|
|
#include "G3D/Array.h"
|
|
#include "G3D/Vector3.h"
|
|
#include "G3D/Vector2.h"
|
|
|
|
namespace G3D {
|
|
|
|
class Any;
|
|
|
|
class Welder {
|
|
private:
|
|
|
|
Welder() {}
|
|
|
|
public:
|
|
|
|
class Settings {
|
|
public:
|
|
/** Surfaces with normals that are within this angle of each
|
|
other are considered to be curved. Default value is toRadians(70.0f).*/
|
|
float normalSmoothingAngle;
|
|
|
|
/** Default value is 0 */
|
|
float vertexWeldRadius;
|
|
|
|
float textureWeldRadius;
|
|
|
|
float normalWeldRadius;
|
|
|
|
inline Settings(float normalSmoothAngle = toRadians(70.0f)) :
|
|
normalSmoothingAngle(normalSmoothAngle),
|
|
vertexWeldRadius(0.001f),
|
|
textureWeldRadius(0.0001f),
|
|
normalWeldRadius(0.01f) {}
|
|
|
|
|
|
Settings(const Any& any);
|
|
|
|
Any toAny() const;
|
|
|
|
void serialize(class BinaryOutput& b) const;
|
|
|
|
void deserialize(class BinaryInput& b);
|
|
};
|
|
|
|
/**
|
|
Mutates geometry, texCoord, and indexArray so that the output has
|
|
collocated vertices collapsed (welded).
|
|
|
|
@param vertices Input and output
|
|
@param textureCoords Input and output
|
|
@param normals Output only
|
|
@param indices Input and output. This is an array of trilist indices.
|
|
*/
|
|
static void weld(
|
|
Array<Vector3>& vertices,
|
|
Array<Vector2>& textureCoords,
|
|
Array<Vector3>& normals,
|
|
Array<Array<int>*>& indices,
|
|
const Settings& settings);
|
|
|
|
/**
|
|
Mutates geometry, texCoord, and indexArray so that the output has collocated vertices collapsed (welded).
|
|
|
|
@param vertices Input and output
|
|
@param textureCoords Input and output
|
|
@param normals Output only
|
|
@param indices Input and output. This is an array of trilist indices.
|
|
*/
|
|
inline static void weld(
|
|
Array<Vector3>& vertices,
|
|
Array<Vector2>& textureCoords,
|
|
Array<Vector3>& normals,
|
|
Array<int>& indices,
|
|
const Settings& settings) {
|
|
|
|
Array<Array<int>*> meta;
|
|
meta.append(&indices);
|
|
weld(vertices, textureCoords, normals, meta, settings);
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|