| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #ifndef VERTEX_H_
- #define VERTEX_H_
- #include "FileIO.h"
- #include "Vector2.h"
- #include "Vector3.h"
- #include "Vector4.h"
- // Maximum number of supported UV sets
- #define MAX_UV_SETS 8
- namespace gameplay
- {
- class Vertex
- {
- public:
- static const unsigned int POSITION_COUNT = 3;
- static const unsigned int NORMAL_COUNT = 3;
- static const unsigned int TANGENT_COUNT = 3;
- static const unsigned int BINORMAL_COUNT = 3;
- static const unsigned int TEXCOORD_COUNT = 2;
- static const unsigned int DIFFUSE_COUNT = 4;
- static const unsigned int BLEND_WEIGHTS_COUNT = 4;
- static const unsigned int BLEND_INDICES_COUNT = 4;
- /**
- * Constructor.
- */
- Vertex(void);
- /**
- * Destructor.
- */
- ~Vertex(void);
- Vector3 position;
- Vector3 normal;
- Vector3 tangent;
- Vector3 binormal;
- Vector2 texCoord[MAX_UV_SETS];
- Vector4 diffuse;
- Vector4 blendWeights;
- Vector4 blendIndices;
- bool hasNormal, hasTangent, hasBinormal, hasTexCoord[MAX_UV_SETS], hasDiffuse, hasWeights;
- inline bool operator<(const Vertex& v) const
- {
- if (position == v.position)
- {
- if (normal == v.normal)
- {
- if (tangent == v.tangent)
- {
- if (binormal == v.binormal)
- {
- if (diffuse == v.diffuse)
- {
- if (blendWeights == v.blendWeights)
- {
- if (blendIndices == v.blendIndices)
- {
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- {
- if (!(texCoord[i] == v.texCoord[i]))
- return texCoord[i] < v.texCoord[i];
- }
- return false;
- }
- return blendIndices < v.blendIndices;
- }
- return blendWeights < v.blendWeights;
- }
- return diffuse < v.diffuse;
- }
- return binormal < v.binormal;
- }
- return tangent < v.tangent;
- }
- return normal < v.normal;
- }
- return position < v.position;
- }
- inline bool operator==(const Vertex& v) const
- {
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- {
- if (!(texCoord[i] == v.texCoord[i]))
- return false;
- }
- return position==v.position && normal==v.normal && tangent==v.tangent && binormal==v.binormal &&
- diffuse==v.diffuse && blendWeights==v.blendWeights && blendIndices==v.blendIndices;
- }
- /**
- * Returns the size of this vertex in bytes.
- */
- unsigned int byteSize() const;
- /**
- * Writes this vertex to the binary file stream.
- */
- void writeBinary(FILE* file) const;
- /**
- * Writes this vertex to a text file stream.
- */
- void writeText(FILE* file) const;
- /**
- * Normalizes the blend weights of this vertex so that they add up to 1.0.
- */
- void normalizeBlendWeight();
- };
- }
- #endif
|