Unity3D研究 GL详解

Unity内置了GL类  封装了OpenGL,可以通过GL类来实现一些简单的画图操作,

根据Unity官方API来研究一下。

将官方GL的实例代码考到Unity执行后是这个效果

代码中有这样一个回调是属于屏幕渲染的,需要在API里了解一下
 public void OnRenderObject()
Unity的生命周期执行顺序中,屏幕渲染会在GameLogic后会执行
其中有几个屏幕渲染回调API来了解一下



官方的GL示例代码 我翻译了一下便于大家理解

其中需要注意的是:

GL.Push  和  GL.Pop  之间写GL代码

GL.Begin 和 GL.End  之间写画线逻辑Begin和End 之间的两个Vector3表示起点和终点


  //划线的数量
    private int lineCount = 100;
    //每条线的长度
    private  float radius = 3.0f;
    //划线使用的材质球
    static Material lineMaterial;
    /// <summary>
    /// 创建一个材质球
    /// </summary>
    static void CreateLineMaterial()
    {
        //如果材质球不存在
        if (!lineMaterial)
        {
            //用代码的方式实例一个材质球
            Shader shader = Shader.Find("Hidden/Internal-Colored");
            lineMaterial = new Material(shader);
            lineMaterial.hideFlags = HideFlags.HideAndDontSave;
            //设置参数
            lineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
            lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
            //设置参数
            lineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
            //设置参数
            lineMaterial.SetInt("_ZWrite", 0);
        }
    }

    /// <summary>
    /// 使用GL画线的回调
    /// </summary>
    public void OnRenderObject()
    {
        //创建材质球
        CreateLineMaterial();
        //激活第一个着色器通过(在本例中,我们知道它是唯一的通过)
        lineMaterial.SetPass(0);
        //渲染入栈  在Push——Pop之间写GL代码
        GL.PushMatrix();
        //矩阵相乘,将物体坐标转化为世界坐标
        GL.MultMatrix(transform.localToWorldMatrix);

        // 开始画线  在Begin——End之间写画线方式
        //GL.LINES 画线
        GL.Begin(GL.LINES);
        for (int i = 0; i < lineCount; ++i)
        {
            float a = i / (float)lineCount;
            float angle = a * Mathf.PI * 2;
            // 设置颜色
     
  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值