1.前言
本文通过GL类实现一个动态画线功能,即鼠标每点击一下,会画出一条线,同时会出现一条动态线。
2.代码
由于通过input类获取到的鼠标坐标为屏幕像素值,所以线的坐标也为像素坐标,所以实在屏幕空间下进行绘制。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Graphics04GLDrawLineDynamic : MonoBehaviour
{
private Material glMat;
private List<Vector3> points = new List<Vector3>();
private void SetMaterialPass()
{
if (glMat == null)
{
glMat = new Material(Shader.Find("Hidden/Internal-Colored"));
}
glMat.SetPass(0);
}
private void OnRenderObject()
{
if (points.Count != 0)
{
SetMaterialPass();
DrawLines();
}
}
private void DrawLines()
{
GL.PushMatrix();
GL.LoadPixelMatrix();
GL.Begin(GL.LINES);
GL.Color(Color.red);
for (int i = 0; i < points.Count - 1; i++)
{
GL.Vertex(points[i]);
GL.Vertex(points[i + 1]);
}
GL.Vertex(points[points.Count - 1]);
GL.Vertex(Input.mousePosition);
GL.End();
GL.PopMatrix();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
points.Add(Input.mousePosition);
}
}
}