Fix cap UV

master
Jeremy HU 2022-11-04 08:35:23 +11:00
parent 1fc2399bf6
commit af67dc0cd6
3 changed files with 11 additions and 9 deletions

View File

@ -81,7 +81,7 @@ void SectionRemesher::remesh()
maxUs[i] = offsetU; maxUs[i] = offsetU;
offsetU += (m_vertices[i] - m_vertices[j]).length(); offsetU += (m_vertices[i] - m_vertices[j]).length();
} }
maxUs[m_ringSize] = offsetU; maxUs[m_ringSize] += offsetU;
offsetU = std::max(offsetU, std::numeric_limits<double>::epsilon()); offsetU = std::max(offsetU, std::numeric_limits<double>::epsilon());
for (auto& it : maxUs) for (auto& it : maxUs)
it /= offsetU; it /= offsetU;
@ -90,8 +90,8 @@ void SectionRemesher::remesh()
m_generatedFaces.emplace_back(std::vector<size_t> { i, j, m_ringSize }); m_generatedFaces.emplace_back(std::vector<size_t> { i, j, m_ringSize });
m_generatedFaceUvs.emplace_back(std::vector<Vector2> { m_generatedFaceUvs.emplace_back(std::vector<Vector2> {
Vector2(maxUs[i], m_ringV), Vector2(maxUs[i], m_ringV),
Vector2(maxUs[j], m_ringV), Vector2(maxUs[i + 1], m_ringV),
Vector2((maxUs[i] + maxUs[j]) * 0.5, m_centerV) }); Vector2((maxUs[i] + maxUs[i + 1]) * 0.5, m_centerV) });
} }
return; return;
} }

View File

@ -299,14 +299,12 @@ void TubeMeshBuilder::build()
} }
} }
if (!m_isCircle) { if (!m_isCircle) {
addCap(cutFaceIndices.back(), vOffsetBecauseOfFrontCap + vTubeRatio, 1.0); addCap(cutFaceIndices.back(), vOffsetBecauseOfFrontCap + vTubeRatio, 1.0, false);
auto front = cutFaceIndices.front(); addCap(cutFaceIndices.front(), vOffsetBecauseOfFrontCap, 0.0, true);
std::reverse(front.begin(), front.end());
addCap(front, vOffsetBecauseOfFrontCap, 0.0);
} }
} }
void TubeMeshBuilder::addCap(const std::vector<size_t>& section, double ringV, double centerV) void TubeMeshBuilder::addCap(const std::vector<size_t>& section, double ringV, double centerV, bool reverseU)
{ {
std::vector<size_t> vertexIndices = section; std::vector<size_t> vertexIndices = section;
std::vector<Vector3> ringVertices(vertexIndices.size()); std::vector<Vector3> ringVertices(vertexIndices.size());
@ -325,9 +323,13 @@ void TubeMeshBuilder::addCap(const std::vector<size_t>& section, double ringV, d
for (size_t i = 0; i < it.size(); ++i) for (size_t i = 0; i < it.size(); ++i)
newFace[i] = vertexIndices[it[i]]; newFace[i] = vertexIndices[it[i]];
m_generatedFaces.emplace_back(newFace); m_generatedFaces.emplace_back(newFace);
if (reverseU)
std::reverse(m_generatedFaces.back().begin(), m_generatedFaces.back().end());
} }
for (const auto& it : sectionRemesher.generatedFaceUvs()) { for (const auto& it : sectionRemesher.generatedFaceUvs()) {
m_generatedFaceUvs.emplace_back(it); m_generatedFaceUvs.emplace_back(it);
if (reverseU)
std::reverse(m_generatedFaceUvs.back().begin(), m_generatedFaceUvs.back().end());
} }
} }

View File

@ -69,7 +69,7 @@ private:
const Vector3& forwardDirection); const Vector3& forwardDirection);
void applyRoundEnd(); void applyRoundEnd();
void applyInterpolation(); void applyInterpolation();
void addCap(const std::vector<size_t>& section, double ringV, double centerV); void addCap(const std::vector<size_t>& section, double ringV, double centerV, bool reverseU);
}; };
}; };