전문가용 물결 무늬 스타일(평면)
17765 단어 Unity
Plane.cs
using UnityEngine;
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Plane : MonoBehaviour
{
[SerializeField] private Vector2 size = new Vector2(4, 3);
[SerializeField] private Vector2Int segment = new Vector2Int(4, 3);
private void Awake()
{
Mesh mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
Vector3[] vertices = new Vector3[(segment.x + 1) * (segment.y + 1)];
int[] triangles = new int[segment.x * segment.y * 2 * 3];
Vector2 halfSize = size * 0.5f;
Vector2 sizeStep = size / segment;
int vi = 0;
for (int y = 0; y < segment.y + 1; y++)
{
for (int x = 0; x < segment.x + 1; x++)
{
vertices[vi++] = new Vector3(sizeStep.x * x - halfSize.x, sizeStep.y * y - halfSize.y, 0);
}
}
int ti = 0;
for (int y = 0; y < segment.y; y++)
{
for (int x = 0; x < segment.x; x++)
{
triangles[ti] = x + y * (segment.x + 1);
triangles[ti + 1] = triangles[ti + 5] = x + (y + 1) * (segment.x + 1);
triangles[ti + 2] = triangles[ti + 4] = (x + 1) + y * (segment.x + 1);
triangles[ti + 3] = (x + 1) + (y + 1) * (segment.x + 1);
ti += 6;
}
}
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.RecalculateNormals();
}
}
이번에 생성된 평면의 크기와 분할수size
와 segment
는 거리측정기에서 임의로 설정할 수 있다.메쉬 구성은 다음과 같습니다(분할 수는 기본값).숫자는 정점의 색인을 나타내고, 원으로 둘러싸인 숫자는 삼각형의 순서를 정의한다. (중도 생략)
그림에서 보듯이 정점은
(segment.x + 1) * (segment.y + 1)
만 있으면 된다.또한 망상물을 종횡으로 분할한 후의 사각형은 두 개의 삼각형을 만들 수 있으며 삼각형의 수량은 segment.x * segment.y * 2
이다.따라서 triangles
어레이의 크기는 segment.x * segment.y * 2 * 3
입니다.소스 코드의 다음 부분에서 정점을 정의했습니다.XY 평면에 만들어진 메쉬의 중심을 원점과 일치시키기 위해 정점을 설정합니다.
Vector2 halfSize = size * 0.5f;
Vector2 sizeStep = size / segment;
int vi = 0;
for (int y = 0; y < segment.y + 1; y++)
{
for (int x = 0; x < segment.x + 1; x++)
{
vertices[vi++] = new Vector3(sizeStep.x * x - halfSize.x, sizeStep.y * y - halfSize.y, 0);
}
}
삼각형의 정의는 다음과 같은 곳에서 진행된다.쌍순환에서 두 삼각형의 직사각형을 구성하였다.두 삼각형에서 정사각형을 만드는 방법에 대해서는 이전 기사를 참조하십시오.int ti = 0;
for (int y = 0; y < segment.y; y++)
{
for (int x = 0; x < segment.x; x++)
{
triangles[ti] = x + y * (segment.x + 1);
triangles[ti + 1] = triangles[ti + 5] = x + (y + 1) * (segment.x + 1);
triangles[ti + 2] = triangles[ti + 4] = (x + 1) + y * (segment.x + 1);
triangles[ti + 3] = (x + 1) + (y + 1) * (segment.x + 1);
ti += 6;
}
}
Reference
이 문제에 관하여(전문가용 물결 무늬 스타일(평면)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aa_debdeb/items/043695f998606876cfb4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)