我有一个网格,表示了一个球面的一部分表面,我在确定顶点UV坐标时遇到了一些困难。
给定生成顶点代码后,是否可以解释/提供一个示例,以便我可以确定UV坐标?
传入的“Region”包含北、南、东、西的度数。该代码将这些值转换为弧度,并确定所需数量的顶点在水平和垂直方向上的步长大小。
到目前为止,这一切都很好。
对于此“区域”,生成了一个球面的一部分,我想在该部分上放置纹理,其中纹理的角落也是网格的角落。
换句话说,在以下代码中如何完成“todo”...
public void BuildVerts(Voxels.Objects.PlanetRegion region, int planetSize, int verticals, int horizontals, out Vector3[] verts, out Vector2[] uvs)
{
// determine range and stepping variable
var range = region.ToRadians();
var verticalStep = (range.East - range.West) / horizontals;
var horizontalStep = (range.North - range.South) / verticals;
// define result containers
var vertList = new List<Vector3>();
var uvList = new List<Vector2>();
// ok lets do this
for (double az = range.West; az <= range.East; az += horizontalStep)
{
for (double inc = range.South; inc <= range.North; inc += verticalStep)
{
var newVert = new Vector3(
(float)(planetSize * Math.Sin(az) * Math.Cos(inc)),
(float)(planetSize * Math.Sin(az) * Math.Sin(inc)),
(float)(planetSize * Math.Cos(az))
);
//TODO: Determine this!
var newUv = new Vector2();
vertList.Add(newVert);
uvList.Add(newUv);
}
}
verts = vertList.ToArray();
uvs = uvList.ToArray();
}