zoukankan      html  css  js  c++  java
  • 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的相关教程,函数名字都是一样的,照搬就行了....
  • 相关阅读:
    POJ
    HDU
    Python之列表
    列表、元组、字典总结
    Python之列表、原组、字典总结
    [P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)
    [P3957][NOIP2017]跳房子 (DP+二分/队列?)
    [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)
    [P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
    [POJ1006]生理周期 (中国剩余定理)
  • 原文地址:https://www.cnblogs.com/coldcode/p/5334847.html
Copyright © 2011-2022 走看看