Unity は GL.wireframe を使用して、URP パイプラインに基づいてオブジェクトの両面ワイヤーフレームを迅速に描画します

サイクルを使って表と裏を別々に描くのですが、表と裏を一度ずつ描く方法があってもいいような気がします。一番の理由は、私がGLの部分を完全に理解していないからです、心配しないで、ゆっくりやってください。

コードリファレンス:

using UnityEngine;
using UnityEngine.Rendering;

public class GLWireFrame : MonoBehaviour
{
	[SerializeField]
	MeshFilter filter;
	[SerializeField]
	Material matFront;
	[SerializeField]
	Material matBack;

	Vector3[] verts;
	int[] tris;
	private void Start()
	{
		verts = filter.mesh.vertices;
		tris = filter.mesh.triangles;
	}

	void OnEnable()
	{
		RenderPipelineManager.endCameraRendering += EndCameraRendering;
	}

	void OnDisable()
	{
		RenderPipelineManager.endCameraRendering -= EndCameraRendering;
	}

	void EndCameraRendering(ScriptableRenderContext context, Camera camera)
	{
		float len = 10;
		Vector3 p1, p2;
		p1 = new Vector3(len * Mathf.Cos(Time.time), len * Mathf.Sin(Time.time), 0);
		p2 = -p1;

		GL.MultMatrix(transform.localToWorldMatrix);
		GL.wireframe = true;

		GL.Begin(GL.TRIANGLES);

		matBack.SetPass(0);

		for (int i = 0; i < tris.Length; i += 3)
		{
			GL.Vertex(verts[tris[i]]);
			GL.Vertex(verts[tris[i + 2]]);
			GL.Vertex(verts[tris[i + 1]]);
		}

		GL.End();

		matFront.SetPass(0);
		GL.Begin(GL.TRIANGLES);

		for (int i = 0; i < tris.Length; i+=3)
		{
			GL.Vertex(verts[tris[i]]);
			GL.Vertex(verts[tris[i +1]]);
			GL.Vertex(verts[tris[i +2]]);
		}

		GL.End();
		GL.wireframe = false;
	}
}

おすすめ

転載: blog.csdn.net/ttod/article/details/132054204