Unity使用GL动态画点

需要挂在相机上

byte数组动态更新,实时画在界面上


using System.Collections;
using System.Collections.Generic;
using GeeVision.Core;
using UnityEngine;

/// 
/// GL 图像库
/// 1、GL图像库是底层的图像库,主要功能是使用程序来绘制常见的2D与3D几何图形。这些图形
/// 具有一定的特殊性,它们不属于3D网格图形,只会以面的形式渲染
/// 
/// 2、绘制2D图像时,需要使用GL.LoadOrtho()方法来将图形映射在平面中,绘制的是3D图形,就无须使用此方法
/// 
/// 3、使用GL图像库时,需要将所有绘制相关的内容写在OnPostRender()方法中
/// 
public class TDrawPoint : MonoBehaviour 
{
    /// 
    /// 绘制线段的材质
    /// 
    public Material material;

    public byte[] Recognized = new byte[224 * 171];

    void Start()
    {

        material = new Material(Shader.Find("Particles/Alpha Blended"))
        {
            hideFlags = HideFlags.HideAndDontSave,
            shader = { hideFlags = HideFlags.HideAndDontSave }
        };
    }

    void Update()
    {
        Recognized = GeeVisionListener.Recognized;
    }

    private int index;
    private void OnPostRender()
    {
        index = 0;

        if (!material)
        {
            Debug.LogError("Material is null");
            return;
        }

        material.SetPass(0);                  //设置该材质通道,0为默认值
        GL.LoadOrtho();                       //设置绘制2D图像
        GL.Begin(GL.LINES);                   //表示开始绘制,绘制类型为线段
        for (int i = 0; i < 171; i++)
        {
            for (int j = 0; j < 224; j++)
            {
                GL.Color(Recognized[index] == 0 ? Color.black : Color.white);
                index++;
                DrawOnePoint(i+100, j+100);   //绘制线段0
            }
        }
        GL.End();                             //结束绘制
    }

    private void DrawOnePoint(float x, float y)
    {
        GL.Vertex(new Vector3(x / Screen.width, y / Screen.height, 0));     //设置顶点
    }
}


你可能感兴趣的:(Unity)