1. 程式人生 > >Opengl es2.0 學習筆記(十)VBO、IBO和FBO

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 學習筆記VBOIBOFBO

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學習筆記——迴圈語句fordo-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. 創建主題樣式