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場景的內容
這裏寫圖片描述java

總結

這只是一個簡單的OpenGL使用教程,更多的操做請自行了解OpenGL的相關教程,函數名字都是同樣的,照搬就好了....
相關文章
相關標籤/搜索