В моем коде я создаю 2 матрицы, которые хранят информацию о двух разных сетках, используя следующий код:
Mesh mesh;
MeshFilter filter;
public SphereMesh SphereMesh;
public CubeMesh CubeMesh;
public Material pointMaterial;
public Mesh pointMesh;
public List<Matrix4x4> matrices1 = new List<Matrix4x4>();
public List<Matrix4x4> matrices2 = new List<Matrix4x4>();
[Space]
public float normalOffset = 0f;
public float globalScale = 0.1f;
public Vector3 scale = Vector3.one;
public int matricesNumber = 1; //determines which matrices to store info in
public void StorePoints()
{
Vector3[] vertices = mesh.vertices;
Vector3[] normals = mesh.normals;
Vector3 scaleVector = scale * globalScale;
// Initialize chunk indexes.
int startIndex = 0;
int endIndex = Mathf.Min(1023, mesh.vertexCount);
int pointCount = 0;
while (pointCount < mesh.vertexCount)
{
// Create points for the current chunk.
for (int i = startIndex; i < endIndex; i++)
{
var position = transform.position + transform.rotation * vertices[i] + transform.rotation * (normals[i].normalized * normalOffset);
var rotation = Quaternion.identity;
pointCount++;
if (matricesNumber == 1)
{
matrices1.Add(Matrix4x4.TRS(position, rotation, scaleVector));
}
if (matricesNumber == 2)
{
matrices2.Add(Matrix4x4.TRS(position, rotation, scaleVector));
}
rotation = transform.rotation * Quaternion.LookRotation(normals[i]);
}
// Modify start and end index to the range of the next chunk.
startIndex = endIndex;
endIndex = Mathf.Min(startIndex + 1023, mesh.vertexCount);
}
}
GameObject начинается как сетка Cube, и этот код хранит информацию о сеткев matrices1
.В другом месте в коде, не показанном, у меня есть это так, что Сетка изменяется на Сферу и затем меняет matricesnumber
на 2, затем запускает код выше, чтобы сохранить информацию о новой сетке Сферы в matrices2
.
Кажется, это работает, так как я могу использовать код вроде Graphics.DrawMesh(pointMesh, matrices1[i], pointMaterial, 0);
для рисования 1 меша на вершину меша Куба.И я могу использовать ту же линию (но с matrices2[i]
), чтобы нарисовать 1 сетку на вершину сетки Сферы.
Вопрос: Как мне нарисовать сетку для каждой вершинысетка Cube (информация хранится в matrices1
) на экране, а затем сделать эти сетки вершин Lerp
в положениях вершин сетки Sphere (информация хранится в matrices2
)?
Я пытаюсьвзломать его такими вещами, как
float t = Mathf.Clamp((Time.time % 2f) / 2f, 0f, 1f);
matrices1.position.Lerp(matrices1.position, matrices2.position, t);
, но, очевидно, это неверный код.Какое может быть решение?Спасибо.