Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何计算正确的UV';这个网眼布是什么?_C++_3d_Uv Mapping_Unreal Engine4 - Fatal编程技术网

C++ 如何计算正确的UV';这个网眼布是什么?

C++ 如何计算正确的UV';这个网眼布是什么?,c++,3d,uv-mapping,unreal-engine4,C++,3d,Uv Mapping,Unreal Engine4,我目前正在与UE4合作一个项目,并编写了一个高度图生成器,并将其与delaunay三角剖分器相结合。然后我必须从输出文件中读取三角形/顶点。但是我的紫外线有问题。每个顶点都想定义一个U和一个V变量,但我不知道如何计算它们。基本上,我放在最后一个网格上的纹理应该看起来像一个大纹理。我唯一能做的就是(在玩0-1范围内的值时)每个三角形都有一个纹理显示,但没有与其他所有三角形对齐,所以看起来像核电站爆炸 下面是我从两个文件中读取所有顶点并随机指定UV排序的代码 inStream >> ve

我目前正在与UE4合作一个项目,并编写了一个高度图生成器,并将其与delaunay三角剖分器相结合。然后我必须从输出文件中读取三角形/顶点。但是我的紫外线有问题。每个顶点都想定义一个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);
    }
inStream>>vertexCount>>缓冲区>>缓冲区;//第一个元素是元素数//跳过第二个和第三个
焦油三角;
对于(int i=0;i>缓冲>>i1>>i2>>i3;
i1--;
i2--;
i3--;
v0.Position.X=节点[i1].X;
v0.Position.Y=节点[i1].Y;
v0.Position.Z=vectorPoints[nodes[i1].X][nodes[i1].Y];
//v0.位置Z=5;
v0.U=0.0;
v0.V=0.5;
v1.Position.X=节点[i2].X;
v1.Position.Y=节点[i2].Y;
v1.Position.Z=vectorPoints[nodes[i2].X][nodes[i2].Y]。第一;
v1.U=0.5;
v1.V=0.5;
v2.Position.X=节点[i3].X;
v2.Position.Y=节点[i3].Y;
v2.Position.Z=vectorPoints[nodes[i3].X][nodes[i3].Y]。第一;
v2.U=0.0;
v2.V=0.0;
三角形。顶点0=v0;
三角形。顶点1=v1;
三角形。顶点2=v2;
三角形。添加(三角形);
}
谢谢你的帮助

线框:

使用指定的材料:

编辑:

好的,我添加了以下代码:

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;
    }
double range=(最低x-最高x)*-1;
双偏移量=0-最低点;
对于(int i=0;i
现在,它看起来不再像核事故了,但纹理围绕整个网格拉伸,而不是重复,并且仍然有轻微扭曲。

尝试从.U计算中删除“/range”,并对.V使用类似的公式,而不仅仅是“1-vT.U”。然后告诉我们这是否有帮助。很难理解你想要实现什么,但这至少会让你更接近。