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的相關教程,函數名字都是一樣的,照搬就行了....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM