Как рассчитать правильные значения УФ для этой сетки?

В настоящее время я работаю над проектом с UE4, написал генератор карты высот и объединил его с триангулятором Делоне. Затем я должен прочитать треугольники / вершины из выходного файла. Но у меня проблема с ультрафиолетом. Каждая вершина хочет получить переменную U и V, но я понятия не имею, как их вычислить. По сути, текстура, которую я наложил на финальную сетку, должна выглядеть как одна большая текстура. Единственное, с чем я работал (просто играя со значениями в диапазоне 0-1), это то, что каждый треугольник имеет текстуру, но не выровнен по отношению ко всем остальным, поэтому он выглядит как взрыв атомной электростанции.

Вот код, где я читаю все вершины из двух файлов и определяю вид UV случайным образом.

inStream >> vertexCount >> buffer >> buffer; // first element is the number of elements // skip second and third

TArray<FProceduralMeshTriangle> triangles;
for (int i = 0; i < vertexCount; i++){
FProceduralMeshTriangle triangle;
FProceduralMeshVertex v0, v1, v2;
int i1, i2, i3;
inStream >> buffer >> i1 >> i2 >> i3;
i1--;
i2--;
i3--;
v0.Position.X = nodes[i1].X;
v0.Position.Y = nodes[i1].Y;
v0.Position.Z = vectorPoints[nodes[i1].X][nodes[i1].Y].first;
//v0.Position.Z = 5;
v0.U = 0.0;
v0.V = 0.5;

v1.Position.X = nodes[i2].X;
v1.Position.Y = nodes[i2].Y;
v1.Position.Z = vectorPoints[nodes[i2].X][nodes[i2].Y].first;
v1.U = 0.5;
v1.V = 0.5;

v2.Position.X = nodes[i3].X;
v2.Position.Y = nodes[i3].Y;
v2.Position.Z = vectorPoints[nodes[i3].X][nodes[i3].Y].first;
v2.U = 0.0;
v2.V = 0.0;

triangle.Vertex0 = v0;
triangle.Vertex1 = v1;
triangle.Vertex2 = v2;
triangles.Add(triangle);
}

Спасибо за вашу помощь!

каркасные:
Каркасный

С указанным материалом:
С материалом

Редактировать:

Хорошо, я добавил следующий код:

double range = (lowestX - highestX)*-1;
double offset = 0 - lowestX;

for (int i = 0; i < triangles.Num(); i++){
FProceduralMeshVertex vT;
vT = triangles[i].Vertex0;
vT.U = (vT.Position.X + offset) / range;
vT.V = 1 - vT.U;
triangles[i].Vertex0 = vT;

vT = triangles[i].Vertex1;
vT.U = (vT.Position.X + offset) / range;
vT.V = 1 - vT.U;
triangles[i].Vertex1 = vT;

vT = triangles[i].Vertex2;
vT.U = (vT.Position.X + offset) / range;
vT.V = 1 - vT.U;
triangles[i].Vertex2 = vT;
}

Теперь это больше не похоже на ядерную аварию, но текстура растягивается вокруг всей сетки, а не повторяется, и она все еще слегка искажена.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]