將學到的opengl有些坑和知識作些總結,當然了,坑還在挖,所以還會更新的*
1.vao vbo ebo
這三個東西的功能是非常強大的,vbo是儲存頂點有關元資料的,一般情況下,我們不會出錯,但是沒有很了解的情況下,我們畫多個圖就會出錯,首先我先強調下幾點意識
乙個繪製物件我們會申請乙個vao vbo,(ebo視情況而定),物件而言你最好有c++類一樣的工具或意識來包裹它(因為這有個最大的優點,重用性),如果你認為我說的物件是等同於c++的物件,那麼最好請重新設計這個物件,滿足我說的這種意識
用glfw的知道,我們繪製opengl是在宿主視窗的while迴圈裡做的,當我們"同時"(這裡的「同時」是宿主視窗的一次迴圈)繪製很多不同的opengl物件呢,這是通過
glbindvertexarray(vaoid)做到的,可是我們又有疑問我們還需要呼叫glbindbuffer繫結vbo ebo嗎,答案是不需要的(只要你不手動解綁就可以了),第二個問題,我們還需要繫結資料嗎,我們初始會呼叫glbufferdata推送資料,那麼之後該vao被解綁後還需要再推送資料是不必的(只要你沒解綁vbo)
通過以上我們得出個結論,當在一幀繪製不同物件時,只要切換vertexarray的繫結物件就可以了,相當於vbo儲存了原始資料 ebo儲存了資料索引 vao儲存了他們兩且能指定資料的範圍及表示方式,只要不破壞這些關係,繪製的就是你想要的物件
2.紋理個數的範圍是針對誰的
答案是針對程式的,不是你寫的程式,是你寫的鏈結兩個著色器的程式,那麼當我們切換程式時自然就且切換了gl_texture_2d所屬物件,這個結論就是我們不再需要在每一幀裡glbindtexture了
3.區域性座標系是啥?
這個問題我是作了好幾個實驗才弄明白的
第一:我們所畫的物件都是基於視口的,還記得我們新學opengl,不用多說我們都是畫的三角形.可是我們都不敢把座標定位的超過abs(1.0),這是為什麼呢?這是因為視口一開始不確定的,所以先通過(-1,1)對映為視口的範圍,opengl裡所有的座標系最後生成的都是-1.0-1.0的座標系,那麼我們在一開始定義的座標是什麼座標系呢?因為我們畫的物體都是一開始是被特殊對待的,我們能定義它點與點的關係以及形狀,但是我們不能確定他們在世界上的位置(opengl的視口場景),比如我一開始想用c++的類表示乙個由opengl繪製的cube(立方體物件),然後我能夠隨意指定它在opengl場景的位置就可好了,學的深一點的肯定知道通過矩陣變換就可以啦,不過就是將區域性座標系轉換為世界座標系嗎,可是你真的懂區域性座標系嗎
首先我們建立乙個cube物件,然後呼叫draw就好啦,可是我們怎麼指定座標呢?
個人建議:所有物件最大頂點座標都是abs(-1),比如我們建立乙個頂點範圍在(-0.5,0.5)三角形物件,然後建立了(-1.0,1.0)的物件,當對映到世界座標系,對於他們的相對大小你或許覺得還能應付,但是遇到平移指定他們相對位置時就gg了
那麼怎麼形象化解釋區域性座標系和世界座標系呢
區域性座標系就是物體(-1,1)範圍座標系,世界座標系就是視口的(-1,1)範圍座標系,我一開始我定義物體座標係為(-1,1),就像美術老師拿出一張固定大小的紙,然後發給學生每人一張紙,讓他們在紙上的不同位置畫個圖,最後把這些相同大小的紙疊放在老師的紙上,最後學生紙上什麼位置的物件就畫在老師的紙上,一開始老師的紙是世界座標系,學生的紙是視口座標系(雖然還沒畫),但是每個學生都很有愛心,不想占太多空間,畫了較小的東西,於是區域性物體就相當於世界座標系就變小了,那麼我們怎麼反映這種情況呢?很明顯要麼擴大世界座標系,要麼直接縮小物體座標系,因為他們都很小了,所以擴大世界座標系,因為我們所以物件都是(-1.0,1.0),他們作為乙個世界物體始終都是單位一,我們調整比例就可以得出相對大小,而且能夠通過座標輕易的平移
比如乙個物體是縮小35倍那麼世界座標就變成了(-35,35),另乙個物體是縮小了20倍那麼世界座標系(-20,20),如果要指定他們相對位置,就要計算一波了
opengl錯誤總結
opengl錯誤總結 version 330 core n 後面一定要加 n gl position vec4 apos,1.0 最好寫成apos version 330 core layout location 0 in vec3 apos layout location 1 in vec3 ac...
OpenGL 個人初學雜記 入門
下面是個人學習的總結 知識點 1,opengl 它是包含了一系列的 圖形 影象的函式 並不是乙個api 緊緊是由 khronos 組織 制定並維護 規範 2,規範 主要是 制定 函式是如何執行 以及 函式的輸出值 題外話 至於內部每個函式的的具體實現 由opengl 庫的開發者決定,opengl 的...
學習OpenGL總結三
學習opengl總結三 drawglscene 3d.h 內容如下 include drawglscene 3d.h pragma once modify date 2009 01 08 vp hsg include windows的標頭檔案 include 標準輸入 輸出庫的標頭檔案 新增 inc...