簡介
由於項目特殊需求,需要在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的相關教程,函數名字都是一樣的,照搬就行了....
