Fix part uv

master
Jeremy HU 2022-10-23 17:02:34 +11:00
parent 0f44d5cf7b
commit 266ea4349c
1 changed files with 3 additions and 8 deletions

View File

@ -207,33 +207,28 @@ void TubeMeshBuilder::build()
std::vector<std::vector<Vector2>> cutFaceVertexUvs(cutFaceVertexPositions.size()); std::vector<std::vector<Vector2>> cutFaceVertexUvs(cutFaceVertexPositions.size());
std::vector<double> maxUs(cutFaceVertexPositions.size(), 0.0); std::vector<double> maxUs(cutFaceVertexPositions.size(), 0.0);
std::vector<double> maxVs(cutFaceVertexPositions.front().size(), 0.0); std::vector<double> maxVs(cutFaceVertexPositions.front().size(), 0.0);
std::vector<double> offsetVs(cutFaceVertexPositions.front().size(), 0.0);
for (size_t n = 0; n < cutFaceVertexPositions.size(); ++n) { for (size_t n = 0; n < cutFaceVertexPositions.size(); ++n) {
const auto& cutFaceVertices = cutFaceVertexPositions[n]; const auto& cutFaceVertices = cutFaceVertexPositions[n];
double offsetU = 0; double offsetU = 0;
if (n > 0) { if (n > 0) {
size_t m = n - 1; size_t m = n - 1;
for (size_t i = 0; i < cutFaceVertices.size(); ++i) { for (size_t i = 0; i < cutFaceVertices.size(); ++i) {
offsetVs[i] = (cutFaceVertexPositions[n][i] - cutFaceVertexPositions[m][i]).length(); maxVs[i] += (cutFaceVertexPositions[n][i] - cutFaceVertexPositions[m][i]).length();
} }
} }
std::vector<Vector2> uvCoords = { Vector2 { offsetU, offsetVs[0] } }; std::vector<Vector2> uvCoords = { Vector2 { offsetU, maxVs[0] } };
for (size_t j = 1; j < cutFaceVertices.size(); ++j) { for (size_t j = 1; j < cutFaceVertices.size(); ++j) {
size_t i = j - 1; size_t i = j - 1;
uvCoords.push_back({ offsetU, offsetVs[j] }); uvCoords.push_back({ offsetU, maxVs[j] });
offsetU += (cutFaceVertices[j] - cutFaceVertices[i]).length(); offsetU += (cutFaceVertices[j] - cutFaceVertices[i]).length();
} }
cutFaceVertexUvs[n] = uvCoords; cutFaceVertexUvs[n] = uvCoords;
maxUs[n] = offsetU; maxUs[n] = offsetU;
for (size_t i = 0; i < cutFaceVertices.size(); ++i) {
maxVs[i] += offsetVs[i];
}
} }
for (size_t n = 0; n < cutFaceVertexUvs.size(); ++n) { for (size_t n = 0; n < cutFaceVertexUvs.size(); ++n) {
for (size_t k = 0; k < cutFaceVertexUvs[n].size(); ++k) { for (size_t k = 0; k < cutFaceVertexUvs[n].size(); ++k) {
cutFaceVertexUvs[n][k][0] /= std::max(maxUs[n], std::numeric_limits<double>::epsilon()); cutFaceVertexUvs[n][k][0] /= std::max(maxUs[n], std::numeric_limits<double>::epsilon());
cutFaceVertexUvs[n][k][1] /= std::max(maxVs[k], std::numeric_limits<double>::epsilon()); cutFaceVertexUvs[n][k][1] /= std::max(maxVs[k], std::numeric_limits<double>::epsilon());
//dust3dDebug << "uv[" << n << "][" << k << "]:" << cutFaceVertexUvs[n][k][0] << cutFaceVertexUvs[n][k][1];
} }
} }