1. 程式人生 > >2017.08.04 通過openGL紋理在Unity中獲取攝像機影象

2017.08.04 通過openGL紋理在Unity中獲取攝像機影象

主要程式碼如下 :

IEnumerator Start()

    {
        Image_left = new Texture2D(m_videoWidth, m_videoHeight, TextureFormat.ARGB32, false);     //在Unity中建立2D紋理
        Image_left.filterMode = FilterMode.Point;                                                                                       //設定引數
        Image_left.Apply();
        GetComponent<Renderer>().material.SetTexture("_mainTex", Image_left);
        GetComponent<Renderer>().material.SetFloat("_tex_start", 0.0f);
        GetComponent<Renderer>().material.SetFloat("_tex_end", 1.0f);
        GetComponent<Renderer>().material.SetFloat("_tex_offset", 0.0f);


        NativeLib.SetCamTex(Image_left.GetNativeTexturePtr());   //自定義的一個dll外掛Nativelib,功能是將Image_left的紋理指標傳遞到openGL中

     
        yield return StartCoroutine("CallPluginAtEndOfFrames");
    
    }


    private IEnumerator CallPluginAtEndOfFrames()
    {
        while (true)
        {
            // Wait until all frame rendering is done
            yield return new WaitForEndOfFrame();
            GL.IssuePluginEvent(1);     //重點!!!繪圖執行緒將隱式呼叫外掛DLL中的UnityRenderEvent

        }

    }

/***************************nativelib***********************/

static void* m_TexturePointer ;

void _DLLExport SetCamTex(void* texturePtr){

    m_TexturePointer = texturePtr;

}

void _DLLExport UnityRenderEvent(int eventID){

    glDisable(GL_CULL_FACE);

    ...//這裡是openGL的東西,隨便你設定了

    DoRending();   //自定義的渲染函式

}

void DoRending(){

    GLuint glTex = (GLuint)(size_t)(m_TexturePointer);//獲取紋理指標,下面都是openGL的那一套

    glBindTexture(GL_TEXTURE_2D,glTex);

    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, m_Tex.data);

}

最後,填個小坑:如果在linux下執行沒問題,如果是win下,要右鍵Unity.exe  在後面加上 -force-opengl

相關推薦

2017.08.04 通過openGL紋理Unity獲取攝像機影象

主要程式碼如下 : IEnumerator Start()     {         Image_left = new Texture2D(m_videoWidth, m_videoHeight, TextureFormat.ARGB32, false);     //在

2017.08.04 Python網絡爬蟲之Scrapy爬蟲實戰二 天氣預報

font size 項目 執行 weather html time art show 1.項目準備:網站地址:http://quanzhou.tianqi.com/ 2.創建編輯Scrapy爬蟲: scrapy startproject weather scrapy

2017.08.04 Python網絡爬蟲之Scrapy爬蟲實戰二 天氣預報的數據存儲問題

sql語句 city amd64 ces img href asp encoding primary 1.數據存儲到JSon:程序閱讀一般都是使用更方便的Json或者cvs等待格式,繼續講解Scrapy爬蟲的保存方式,也就是繼續對pipelines.py文件動手腳 (1)創

[2017/08/22]高效能C/C++程式設計的那些資料結構

本文首發於騰訊KM,如轉載請註明作者,出處。 偶然在k吧首頁看到了luckyzuo的分享,因為自己一直對這方面很感興趣,所以在工作之餘對照ppt聽了講座錄音,受益匪淺。這次分享提到了幾種資料結構,我結合了自己的一些理解,寫了這篇文章。寫的時候查閱了許多資料,越

Unity獲取Animator動畫片段的時長

sta bre 分享圖片 個數 watermark str size .get 開發 開發環境:Unity5.6.2 private Animator animator; public void GetLengthByName(string name) { floa

Unity獲取滑鼠相對於UI元件的位置

虛擬搖桿 在製作虛擬搖桿的時候,需要獲得滑鼠點選時,在UI元件上的位置 在NGUI中有個api叫UICamera.lastTouchPosition 我們可以獲取在UI螢幕空間中滑鼠的位置,然後經過座

1.簡單例項:ASP.NET下Echarts通過Ajax從資料庫獲取資料

後臺:Test01.ashx.cs:從資料庫獲取資料,通過HTTP請求(HttpContext)實現和前臺資料傳遞json資料 using System; using System.Collections.Generic; using System.Linq; using

unity獲取button文字的內容

using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public clas

unity實現簡單的程式紋理 10.3.1

using UnityEngine; using System.Collections; using System.Collections.Generic; //在unity中實現簡單的程式紋理 10.3.1 //在編輯模式執行 [ExecuteInEditMo

2017-11-08】document.getElementById 在IE隱藏的bug

document.getElementById 一般在前端開發中用來獲取指定ID的控制元件,如果存在這個元素,則會直接返回這個元素,否則返回null. *在IE8以前的版本中,document

unity shader學習筆記(二十一)——Unity的高階紋理之渲染紋理

渲染紋理   渲染目標紋理(Render Target Texture, RTT)是指一個攝像機將渲染結果輸出到顏色緩衝中,並顯示到螢幕上,而不是傳統的幀緩衝和後備緩衝。   多重渲染目標(Multiple Render Target, MRT)是指把場景同

Unity通過觸控式螢幕幕實現模型的旋轉和縮放

using UnityEngine; using System.Collections; public class ScaleAndRotate : MonoBehaviour {     private Touch oldTouch1;  //上次觸控點1(手指1)     private Touch ol

Unity通過場景切換但音樂繼續播放

public class Test: MonoBehaviour {     public GameObject objPrefabInstantSource;//音樂預知物體      private GameObject musicInstant = null;//場景中是否有這個物體       //

關於Unity的新手編碼技巧

編輯器 展開 解決 編譯 出錯 怎麽辦 查看 代碼 寫代碼 寫代碼遇到報錯,問題怎麽辦?怎麽查看unity代碼的接口?函數參數不記得了怎麽辦? 解決方法: 1.選擇不懂的函數或類,按F12,跳轉到代碼的定義,自己去看就可知道了。 2.有的時候,選擇一個函數,按F12想跳轉去

Unity SLua 如何調用UnityC#方法

都差不多 public title 接口 如何 1.原理就是通常在Lua框架中所說的,開放一個C#的web接口,或者叫做在Slua框架中註冊函數。2.作用在Lua中調用C#中的方法,這個是在做熱更新中很常用的一種方法,無論是slua,還是lua,都差不多、這

關於Unity的幾何體

模式 mob 繪制 反射 mod 選擇 and tex 足球場 一、創建幾何體的類型 1: 創建平面 Plane;2: 創建立方體 Cube;3: 創建球體 Sphere;4: 創建膠囊體 Capsule;5: 創建圓柱體 Cylinder;6: 3D文字 3D text;

關於Unity的NGUI和UGUI

幫我 事件 視角 比例 設置 內置 作者 x64 spec 用Unity開發2D遊戲,有三套關系 1.GUI:Unity本身的對象 2.NGUI:以前在Unity中廣泛來做2D的,是第三方的包,需要安裝 3.UGUI:Unity5.X後,Unity找到NGUI的作者,開發了

【只怕沒有幾個人能說清楚】系列之二:Unity的特殊文件夾

物體 avi ebp time 編輯模式 tro hive 預覽 打包 參考:http://www.manew.com/thread-99292-1-1.html 1. 隱藏文件夾 以.開頭的文件夾會被忽略。在這種文件夾中的資源不會被導入,腳本不會被編譯。也不會出現

關於UnityRawImage和Button

clam 屬性 尋址 lam etc 1.2 public 遊戲場景 像素 1.貼圖的Texture Type屬性值 Texture:會把貼圖的大小轉換為最相近的2的n次方,比如400X1369會轉換為512X1024。 Sprite 2D:是貼圖的原始大小。 2.

關於UnityUI的Button節點

pda initial debug.log 禁用 修飾 不能 重復 綁定 etc Button是最常用的UI節點,包含的組件有 1.Image組件 顯示Button的紋理,把Image貼圖拖進Image組件中後,記得點擊Set Native Size,顯示貼圖原始大小