В настоящее время я работаю над проектом с 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;
}
Теперь это больше не похоже на ядерную аварию, но текстура растягивается вокруг всей сетки, а не повторяется, и она все еще слегка искажена.
Задача ещё не решена.