Opengl es2.0 學習筆記(十)VBO、IBO和FBO
VBO:頂點緩衝,也就是說把頂點的儲存在 顯示卡中開闢記憶體,提高傳遞的效率。也可以說叫頂點座標的 緩衝區。
//建立vbo glGenBuffers(1,&_vbo); //繫結vbo glBindBuffer(GL_ARRAY_BUFFER,_vbo); //copy資料到視訊記憶體 // // GL_STREAM_DRAW 不經常變化 //GL_STATIC_DRAW 常量 //GL_DYNAMIC_DRAW 經常變化 glBufferData(GL_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW); //修改部分資料 //glBufferSubData() //繫結完之後 恢復狀態 glBindBuffer(GL_ARRAY_BUFFER,0);
使用:
//使用繫結的vbo
glBindBuffer(GL_ARRAY_BUFFER,_vbo);
//繪製過程
//關閉vbo
glBindBuffer(GL_ARRAY_BUFFER,0);
IBO:索引緩衝,按照索引進行連線,提高效率。按照索引去
畫 圖形。
建立
glGenBuffers(1,&_indexbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_indexbo); glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indexBuf),indexBuf,GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
使用
//開啟
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_indexbo);
//繪製 使用 glDrawElements進行索引繪製
//關閉
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
FBO:幀快取,將我們需要繪製的物體,會知道紋理上,最後在把紋理繪製一遍。這也叫離屏渲染。
FBO建立/開始使用/結束使用
virtual void beginFBO(unsigned FBOID,unsigned textureId) { glBindFramebuffer(GL_FRAMEBUFFER,FBOID); //把資料渲染到紋理 的0級上 glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,textureId,0); } virtual void endFBO(unsigned FBOID,unsigned textureId) { glBindFramebuffer(GL_FRAMEBUFFER,0); } virtual std::pair(unsigned,unsigned) createFBO(int width ,int height) { std::pair(unsigned,unsigned) buf; //unsigned FBOID; //unsigned RBOID; //生產1個幀buffer glGenFramebuffers(1,&buf.first); //繫結framebuffer glBindFramebuffer(GL_FRAMEBUFFER,buf.first); //產生render buffer glGenRenderbuffers(1,&buf.second); //繫結render buffer glBindFramebuffer(GL_RENDERBUFFER,buf.second); //指明緩衝區儲存內容 glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT16,width,height); //關閉render buffer glBindFramebuffer(GL_RENDERBUFFER,0); //關聯 glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,buf.second); //關閉frame buffer glBindFramebuffer(GL_FRAMEBUFFER,0); return buf; }
使用的虛擬碼
createFBO();
onrender
{
beginFBO();
{
//所有的繪製都 繪製到了紋理上
}
endFBO();
shader.bgein();
//畫FBO紋理
shader.end();
}
相關推薦
Opengl es2.0 學習筆記(十)VBO、IBO和FBO
VBO:頂點緩衝,也就是說把頂點的儲存在 顯示卡中開闢記憶體,提高傳遞的效率。也可以說叫頂點座標的 緩衝區。 //建立vbo glGenBuffers(1,&_vbo); //繫結vbo glBindBuffer(GL_ARRAY_BUFFER,_vbo
Opengl es2.0 學習筆記(七)基礎紋理
一.使用紋理過程 使用FreeImage.lib 讀取圖片,獲取調色盤.(windows顏色不是rgb是bgr,此處需要轉換) glGenTextures建立一個紋理控制代碼 gl
Opengl es2.0 學習筆記(三)shader的使用
一.shader Opengl es渲染管線中有兩處可以程式設計,一個是頂點著色器 一個是畫素著色器/片圓著色器 不清楚的可以 看看OpenGLes 渲染管線 二.API //建立shader,返回shader Id //param: //GL_VERTE
Opengl es2.0 學習筆記(五)圖元裝配
文章目錄二、API三、注意四、虛擬碼 一、圖元型別 #define GL_POINTS 0x0000點 #define GL_LINES 0x0001線 #defi
Opengl es2.0 學習筆記(六)矩陣變化
一.座標系變化 openGL使用右手座標 從左到右,x遞增 從下到上,y遞增 從遠到近,z遞增 MVP 模型矩陣(Model):將區域性座標轉換為世界座標 觀察矩陣(View): 投影矩陣(Projection):正交還是透視投影 1.概述 為了將座標從一個座
Opengl es2.0 學習筆記(四)shader語法 GLSL
一、變數 GLSL的變數命名方式與C語言類似。變數的名稱可以使用字母,數字以及下劃線,但變數名不能以數字開頭,還有變數名不能以gl_作為字首,這個是GLSL保留的字首,用於GLSL的內部變數。當然還
Opengl es2.0 學習筆記(API篇)所有API的翻譯
包含了 gl2.h 和egl.h兩個標頭檔案 gl2.h gl2資料結構 /*------------------------------------------------------------------------- * Data type defi
Objective-C學習筆記(十)——迴圈語句for和do-while的使用
在OC中,除了while這種迴圈方式外,還有另外for迴圈和do-while迴圈,它們在不同的業務邏輯下會有不同的作用。可以和C語言和Java對比著學習。(一)程式碼一:int main(int argc, const char * argv[]) { @
SQLite學習筆記(十)-- 事務基本概念和程式碼實現(C++實現)
1.事務基本概念 什麼是事務? 事務是使用者定義的一些列資料操作,這些操作是一個完整的不可分的工作單元。一個事務要麼全部執行,要麼全部不執行。 檢視案例 例如銀行的轉賬操作,張三向李四轉賬1000元。該事務包含以下兩個操作: 1.張三賬戶上扣除1000
Java NIO 學習筆記(五)----路徑、檔案和管道 Path/Files/Pipe
目錄: Java NIO 學習筆記(一)----概述,Channel/Buffer Java NIO 學習筆記(二)----聚集和分散,通道到通道 Java NIO 學習筆記(三)----Selector Java NIO 學習筆記(四)----檔案通道和網路通道 Java NIO 學習筆記(五)----路徑
JQuery學習筆記(四)——建立、插入和刪除節點
一個小練習: 需求1: 點選 submit 按鈕時, 檢查是否選擇 type, 若沒有選擇給出提示: "請選擇型別"; 檢查文字框中是否有輸入(可以去除前後空格), 若沒有輸入,則給出提示: "請輸入內容"; 若檢查都通過, 則在相應的 ul 節點中新增對應的 li 節點
C語言學習筆記(五)—— 運算子、表示式和語句
一、運算子1、賦值運算子:= 賦值表示式的目的是把值儲存到記憶體位置上,用於儲存值的資料區域統稱為資料物件,使用變數名是標識物件的一種方法。物件指的是實際的資料儲存,左值是用於標識和定位儲存位置的標籤,右值指的是能賦值給可修改左值的量。void example1
thphp5.0學習筆記(一)
mic tel 序號 app clas world char p s 庫類 1.目錄結構: 其中thinkphp子目錄是框架核心目錄 thinkphp結構: 2.入口文件 默認自帶的入口文件位於public/index.php 應用目錄為application,其結構
thinkphp5.0學習筆記(二)API後臺處理與命名空間
mac code 輸入 -1 pub 基礎 select() color 第一個 命名空間 先來看命名空間吧; 命名空間是學習TP的基礎, <?php namespace app\lian\c1; class yi{ public $obj = "這是第一個
thinkphp5.0學習筆記(三)獲取信息,變量,綁定參數
名稱 自動識別 參數順序 query images 報錯 oca nds arc 1.構造函數: 控制器類必須繼承了\think\Controller類,才能使用: 方法_initialize 代碼: <?php namespace app\lian\control
如鵬網學習筆記(十)DOM
check 名稱 元素節點 n) mousedown 通過 name 邏輯 css DOM筆記一、DOM簡介 Document Object Model 文檔對象模型 DOM的節點樹模型:整個文檔按照從大到小的節點劃分,每一個內容都算作一個節點 DOM API
.net core 2.0學習筆記(四):遷移.net framework 工程到.net core
編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了
.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移
ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是
Python學習筆記(十)
類型 property 獲取 bsp 構造 屬性 增加 函數類 pro 一、類和構造函數的定義 class 類名(object): def __init__(self,name,score): self.name = name self.sco
Ionic3學習筆記(十)實現夜間模式功能
gpa 效果 app code fff eat ext images provider 本文為原創文章,轉載請標明出處 目錄 創建主題樣式 導入 variables.scss 創建 provider 創建 page 在 App 入口處應用主題 效果圖 1. 創建主題樣式