1

我目前正在使用 UE4 开发一个项目,并编写了一个高度图生成器并将他与一个 delaunay-triangulator 结合起来。然后我必须从输出文件中读取三角形/顶点。但是我有紫外线的问题。每个顶点都想定义一个 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;
    }

现在它看起来不再像核事故了,但是纹理围绕整个网格拉伸,而不是重复,并且仍然略微扭曲。

4

0 回答 0