Unity中简单使用Opengl

简介

由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了)。所以琢磨咯下如何在unity中使用OpenGL,刚找到点入门级的调用,藉此分享一下。

关于Unity和OpenGL

这里不多过的介绍概念知识,unity在脚本中预留了这样一些功能:
1.OnPostRender函数(PS:这个函数只有挂在摄像机上才生效,可以在摄像机做渲染前做进一步操作)
2.GL接口(PS:开放的功能不多,比如GL模式只有LINES=1,QUADS=7,TRIANGLES=4,TRIANGLE_STRIP=5四种,当然也有可能是其他功能也可以用,只是没有列出来,以及一些OpenGL标准中的一些函数并未提供)

OpenGL的基本使用

恩,既然要使用OpenGL,那就先来说说OpenGL的基本格式:
GL.Begin(OpenGL的预置模式);
各种添加顶点(GL.Vertex),设置顶点颜色(GL.Color),贴图(GL.MultiTexCoord)等操作
GL.End();

简单示范

废话不多说了,直接上代码,一共就几行,很简单的:
using UnityEngine;

public class TestScripts : MonoBehaviour
{

    public Material mat;

    void Awake()
    {
    }

    void OnPostRender()
    {
        // 清屏操作(可以不要此操作,这样场景中的对象才可以显示)
        GL.Clear(true, true, Color.black);

        // 将当前矩阵变换对象push缓存下来,防止自己的操作影响到其它渲染操作
        GL.PushMatrix();

        // 设置绘制模式为2D绘制,设置这个模式之后屏幕左下角变为(0,0),屏幕右上角变为(1,1),注释之后变为3D真实坐标
        GL.LoadOrtho();

        // 绘制过程
        for (var i = 0; i < mat.passCount; ++i)
        {
            // 设置shader,用过OpenGL ES2.0的同志应该知道,这个类似于combine glsl的过程,这里么有自己写,用的unity自带的sprite的shader
            // 由于shader可能存在多个pass通道,所以采用遍历的方式将每个通道都绘制一遍,当然有些shader只有一个通道,比如这个自带的sprite的shader
            // 也可以设置成SetPass(0),就是使用默认的第一个通道进行渲染
            mat.SetPass(i);
            // 设置绘制模式为线条模式(这个模式每两个顶点为一组)
            GL.Begin(GL.LINES);

            // 设置顶点颜色(设置下一个顶点的颜色,如果后面没有更改,继续保留这个颜色属性直至被更改)
            GL.Color(Color.red);
            // 向GL中增加一个点的坐标
            GL.Vertex3(0, 0, 0);
            GL.Vertex3(0.5F, 0.5F, 0);

            GL.Color(Color.white);
            GL.Vertex3(0.5F, 0.5F, 0);
            GL.Color(Color.blue);
            GL.Vertex3(1F, 0F, 0);

            // 通知GL关闭当前绘制模式
            GL.End();
        }

        // 将矩阵对象还原,与之前的push操作相对应
        GL.PopMatrix();
    }

}

具体效果如下:因为清了屏,所以背景是黑色的,如果注释掉,也可以显示原有3D场景的内容
这里写图片描述

总结

这只是一个简单的OpenGL使用教程,更多的操作请自行了解OpenGL的相关教程,函数名字都是一样的,照搬就行了....
posted @ 2016-03-29 21:28  玄雨  阅读(14192)  评论(0编辑  收藏  举报