球の表面の一部を表すメッシュがあり、頂点の UV 座標を特定するのに苦労しています。
頂点の生成コードを考えると、UV座標を決定する方法の例を誰かが説明/提供できますか?
渡された「地域」には、北、南、東、西の度数が含まれます。このコードは、値をラジアンに変換し、水平方向と垂直方向の両方で目的の数の頂点をステップする量を決定します。
そのくらいうまくいきます。
この「領域」では、球の表面の一部が生成され、テクスチャの角がメッシュの角でもあるその部分にテクスチャを配置したいと考えています。
言い換えれば、以下のコードで「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();
}