| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "Base.h"
- #include "Vertex.h"
- namespace gameplay
- {
- Vertex::Vertex(void)
- : hasNormal(false), hasTangent(false), hasBinormal(false), hasDiffuse(false), hasWeights(false)
- {
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- hasTexCoord[i] = false;
- }
- Vertex::~Vertex(void)
- {
- }
- unsigned int Vertex::byteSize() const
- {
- unsigned int count = POSITION_COUNT;
- if (hasNormal)
- count += NORMAL_COUNT;
- if (hasTangent)
- count += TANGENT_COUNT;
- if (hasBinormal)
- count += BINORMAL_COUNT;
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- {
- if (hasTexCoord[i])
- count += TEXCOORD_COUNT;
- }
- if (hasWeights)
- count += BLEND_WEIGHTS_COUNT + BLEND_INDICES_COUNT;
- if (hasDiffuse)
- count += DIFFUSE_COUNT;
- return count * sizeof(float);
- }
- void Vertex::writeBinary(FILE* file) const
- {
- writeVectorBinary(position, file);
- if (hasNormal)
- {
- writeVectorBinary(normal, file);
- }
- if (hasTangent)
- {
- writeVectorBinary(tangent, file);
- }
- if (hasBinormal)
- {
- writeVectorBinary(binormal, file);
- }
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- {
- if (hasTexCoord[i])
- {
- writeVectorBinary(texCoord[i], file);
- }
- }
- if (hasDiffuse)
- {
- writeVectorBinary(diffuse, file);
- }
- if (hasWeights)
- {
- writeVectorBinary(blendWeights, file);
- writeVectorBinary(blendIndices, file);
- }
- }
- void Vertex::writeText(FILE* file) const
- {
- write("// position\n", file);
- writeVectorText(position, file);
- if (hasNormal)
- {
- write("// normal\n", file);
- writeVectorText(normal, file);
- }
- if (hasTangent)
- {
- write("// tanget\n", file);
- writeVectorText(tangent, file);
- }
- if (hasBinormal)
- {
- write("// binormal\n", file);
- writeVectorText(binormal, file);
- }
- for (unsigned int i = 0; i < MAX_UV_SETS; ++i)
- {
- if (hasTexCoord[i])
- {
- write("// texCoord\n", file);
- writeVectorText(texCoord[i], file);
- }
- }
- if (hasDiffuse)
- {
- write("// diffuse\n", file);
- writeVectorText(diffuse, file);
- }
- if (hasWeights)
- {
- write("// blendWeights\n", file);
- writeVectorText(blendWeights, file);
- write("// blendIndices\n", file);
- writeVectorText(blendIndices, file);
- }
- }
- void Vertex::normalizeBlendWeight()
- {
- float total = blendWeights.x + blendWeights.y + blendWeights.z + blendWeights.w;
- if (total > 0.0f)
- {
- blendWeights.x = blendWeights.x / total;
- blendWeights.y = blendWeights.y / total;
- blendWeights.z = blendWeights.z / total;
- blendWeights.w = blendWeights.w / total;
- }
- }
- }
|