mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
WIP of assimp integration.
This commit is contained in:
parent
32c7f2c7a7
commit
bf170ffbca
2135 changed files with 1260856 additions and 7 deletions
263
Engine/lib/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h
Normal file
263
Engine/lib/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
/*
|
||||
Copyright (c) 2013 Khaled Mammou - Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#pragma once
|
||||
#ifndef O3DGC_INDEXED_FACE_SET_H
|
||||
#define O3DGC_INDEXED_FACE_SET_H
|
||||
|
||||
#include "o3dgcCommon.h"
|
||||
|
||||
namespace o3dgc
|
||||
{
|
||||
template<class T>
|
||||
class IndexedFaceSet
|
||||
{
|
||||
public:
|
||||
//! Constructor.
|
||||
IndexedFaceSet(void)
|
||||
{
|
||||
memset(this, 0, sizeof(IndexedFaceSet));
|
||||
m_ccw = true;
|
||||
m_solid = true;
|
||||
m_convex = true;
|
||||
m_isTriangularMesh = true;
|
||||
m_creaseAngle = 30;
|
||||
};
|
||||
//! Destructor.
|
||||
~IndexedFaceSet(void) {};
|
||||
|
||||
unsigned long GetNCoordIndex() const { return m_nCoordIndex ;}
|
||||
// only coordIndex is supported
|
||||
unsigned long GetNCoord() const { return m_nCoord ;}
|
||||
unsigned long GetNNormal() const { return m_nNormal ;}
|
||||
unsigned long GetNFloatAttribute(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return m_nFloatAttribute[a];
|
||||
}
|
||||
unsigned long GetNIntAttribute(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
return m_nIntAttribute[a];
|
||||
}
|
||||
unsigned long GetNumFloatAttributes() const { return m_numFloatAttributes;}
|
||||
unsigned long GetNumIntAttributes() const { return m_numIntAttributes ;}
|
||||
const Real * GetCoordMin () const { return m_coordMin;}
|
||||
const Real * GetCoordMax () const { return m_coordMax;}
|
||||
const Real * GetNormalMin () const { return m_normalMin;}
|
||||
const Real * GetNormalMax () const { return m_normalMax;}
|
||||
Real GetCoordMin (int j) const { return m_coordMin[j] ;}
|
||||
Real GetCoordMax (int j) const { return m_coordMax[j] ;}
|
||||
Real GetNormalMin (int j) const { return m_normalMin[j] ;}
|
||||
Real GetNormalMax (int j) const { return m_normalMax[j] ;}
|
||||
|
||||
O3DGCIFSFloatAttributeType GetFloatAttributeType(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return m_typeFloatAttribute[a];
|
||||
}
|
||||
O3DGCIFSIntAttributeType GetIntAttributeType(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
return m_typeIntAttribute[a];
|
||||
}
|
||||
unsigned long GetFloatAttributeDim(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return m_dimFloatAttribute[a];
|
||||
}
|
||||
unsigned long GetIntAttributeDim(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
return m_dimIntAttribute[a];
|
||||
}
|
||||
const Real * GetFloatAttributeMin(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return &(m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES]);
|
||||
}
|
||||
const Real * GetFloatAttributeMax(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return &(m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES]);
|
||||
}
|
||||
Real GetFloatAttributeMin(unsigned long a, unsigned long dim) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
|
||||
return m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim];
|
||||
}
|
||||
Real GetFloatAttributeMax(unsigned long a, unsigned long dim) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
|
||||
return m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim];
|
||||
}
|
||||
Real GetCreaseAngle() const { return m_creaseAngle ;}
|
||||
bool GetCCW() const { return m_ccw ;}
|
||||
bool GetSolid() const { return m_solid ;}
|
||||
bool GetConvex() const { return m_convex ;}
|
||||
bool GetIsTriangularMesh() const { return m_isTriangularMesh;}
|
||||
const unsigned long * GetIndexBufferID() const { return m_indexBufferID ;}
|
||||
const T * GetCoordIndex() const { return m_coordIndex;}
|
||||
T * GetCoordIndex() { return m_coordIndex;}
|
||||
Real * GetCoord() const { return m_coord ;}
|
||||
Real * GetNormal() const { return m_normal ;}
|
||||
Real * GetFloatAttribute(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
return m_floatAttribute[a];
|
||||
}
|
||||
long * GetIntAttribute(unsigned long a) const
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
return m_intAttribute[a] ;
|
||||
}
|
||||
// only coordIndex is supported
|
||||
void SetNNormalIndex(unsigned long) {}
|
||||
void SetNTexCoordIndex(unsigned long) {}
|
||||
void SetNFloatAttributeIndex(int, unsigned long) {}
|
||||
void SetNIntAttributeIndex (int, unsigned long) {}
|
||||
// per triangle attributes not supported
|
||||
void SetNormalPerVertex(bool) {}
|
||||
void SetColorPerVertex(bool) {}
|
||||
void SetFloatAttributePerVertex(int, bool){}
|
||||
void SetIntAttributePerVertex (int, bool){}
|
||||
void SetNCoordIndex (unsigned long nCoordIndex) { m_nCoordIndex = nCoordIndex;}
|
||||
void SetNCoord (unsigned long nCoord) { m_nCoord = nCoord ;}
|
||||
void SetNNormal (unsigned long nNormal) { m_nNormal = nNormal ;}
|
||||
void SetNumFloatAttributes(unsigned long numFloatAttributes)
|
||||
{
|
||||
assert(numFloatAttributes < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
m_numFloatAttributes = numFloatAttributes;
|
||||
}
|
||||
void SetNumIntAttributes (unsigned long numIntAttributes)
|
||||
{
|
||||
assert(numIntAttributes < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
m_numIntAttributes = numIntAttributes;
|
||||
}
|
||||
void SetCreaseAngle (Real creaseAngle) { m_creaseAngle = creaseAngle ;}
|
||||
void SetCCW (bool ccw) { m_ccw = ccw ;}
|
||||
void SetSolid (bool solid) { m_solid = solid ;}
|
||||
void SetConvex (bool convex) { m_convex = convex ;}
|
||||
void SetIsTriangularMesh (bool isTriangularMesh) { m_isTriangularMesh = isTriangularMesh;}
|
||||
void SetCoordMin (int j, Real min) { m_coordMin[j] = min;}
|
||||
void SetCoordMax (int j, Real max) { m_coordMax[j] = max;}
|
||||
void SetNormalMin (int j, Real min) { m_normalMin[j] = min;}
|
||||
void SetNormalMax (int j, Real max) { m_normalMax[j] = max;}
|
||||
void SetNFloatAttribute(unsigned long a, unsigned long nFloatAttribute)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
m_nFloatAttribute[a] = nFloatAttribute;
|
||||
}
|
||||
void SetNIntAttribute(unsigned long a, unsigned long nIntAttribute)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
m_nIntAttribute[a] = nIntAttribute;
|
||||
}
|
||||
void SetFloatAttributeDim(unsigned long a, unsigned long d)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
m_dimFloatAttribute[a] = d;
|
||||
}
|
||||
void SetIntAttributeDim(unsigned long a, unsigned long d)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
m_dimIntAttribute[a] = d;
|
||||
}
|
||||
void SetFloatAttributeType(unsigned long a, O3DGCIFSFloatAttributeType t)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
m_typeFloatAttribute[a] = t;
|
||||
}
|
||||
void SetIntAttributeType(unsigned long a, O3DGCIFSIntAttributeType t)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
m_typeIntAttribute[a] = t;
|
||||
}
|
||||
void SetFloatAttributeMin(unsigned long a, unsigned long dim, Real min)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
|
||||
m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim] = min;
|
||||
}
|
||||
void SetFloatAttributeMax(unsigned long a, unsigned long dim, Real max)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
|
||||
m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim] = max;
|
||||
}
|
||||
void SetIndexBufferID (unsigned long * const indexBufferID) { m_indexBufferID = indexBufferID;}
|
||||
void SetCoordIndex (T * const coordIndex) { m_coordIndex = coordIndex;}
|
||||
void SetCoord (Real * const coord ) { m_coord = coord ;}
|
||||
void SetNormal (Real * const normal ) { m_normal = normal ;}
|
||||
void SetFloatAttribute (unsigned long a, Real * const floatAttribute)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
|
||||
m_floatAttribute[a] = floatAttribute;
|
||||
}
|
||||
void SetIntAttribute (unsigned long a, long * const intAttribute)
|
||||
{
|
||||
assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
|
||||
m_intAttribute[a] = intAttribute ;
|
||||
}
|
||||
void ComputeMinMax(O3DGCSC3DMCQuantizationMode quantMode);
|
||||
|
||||
private:
|
||||
// triangles list
|
||||
unsigned long m_nCoordIndex;
|
||||
T * m_coordIndex;
|
||||
unsigned long * m_indexBufferID;
|
||||
// coord, normals, texcoord and color
|
||||
unsigned long m_nCoord;
|
||||
unsigned long m_nNormal;
|
||||
Real m_coordMin [3];
|
||||
Real m_coordMax [3];
|
||||
Real m_normalMin [3];
|
||||
Real m_normalMax [3];
|
||||
Real * m_coord;
|
||||
Real * m_normal;
|
||||
// other attributes
|
||||
unsigned long m_numFloatAttributes;
|
||||
unsigned long m_numIntAttributes;
|
||||
O3DGCIFSFloatAttributeType m_typeFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
|
||||
O3DGCIFSIntAttributeType m_typeIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
|
||||
unsigned long m_nFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
|
||||
unsigned long m_nIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
|
||||
unsigned long m_dimFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
|
||||
unsigned long m_dimIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
|
||||
Real m_minFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES];
|
||||
Real m_maxFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES];
|
||||
Real * m_floatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
|
||||
long * m_intAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
|
||||
// mesh info
|
||||
Real m_creaseAngle;
|
||||
bool m_ccw;
|
||||
bool m_solid;
|
||||
bool m_convex;
|
||||
bool m_isTriangularMesh;
|
||||
};
|
||||
}
|
||||
#include "o3dgcIndexedFaceSet.inl" // template implementation
|
||||
#endif // O3DGC_INDEXED_FACE_SET_H
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue