LearnOpenGL 渲染乙個三角形

2021-10-06 16:32:22 字數 1268 閱讀 4066

學習opengl的筆記。

原資料:

圖形渲染管線的第乙個部分是頂點著色器(vertex shader),它把乙個單獨的頂點作為輸入。頂點著色器主要的目的是把3d座標轉為另一種3d座標(後面會解釋),同時頂點著色器允許我們對頂點屬性進行一些基本處理。

圖元裝配(primitive assembly)階段將頂點著色器輸出的所有頂點作為輸入(如果是gl_points,那麼就是乙個頂點),並所有的點裝配成指定圖元的形狀;本節例子中是乙個三角形。

圖元裝配階段的輸出會傳遞給幾何著色器(geometry shader)。幾何著色器把圖元形式的一系列頂點的集合作為輸入,它可以通過產生新頂點構造出新的(或是其它的)圖元來生成其他形狀。例子中,它生成了另乙個三角形。

幾何著色器的輸出會被傳入光柵化階段(rasterization stage),這裡它會把圖元對映為最終螢幕上相應的畫素,生成供片段著色器(fragment shader)使用的片段(fragment)。在片段著色器執行之前會執行裁切(clipping)。裁切會丟棄超出你的檢視以外的所有畫素,用來提公升執行效率。

片段著色器的主要目的是計算乙個畫素的最終顏色,這也是所有opengl高階效果產生的地方。通常,片段著色器包含3d場景的資料(比如光照、陰影、光的顏色等等),這些資料可以被用來計算最終畫素的顏色。

在所有對應顏色值確定以後,最終的物件將會被傳到最後乙個階段,我們叫做alpha測試和混合(blending)階段。這個階段檢測片段的對應的深度(和模板(stencil))值(後面會講),用它們來判斷這個畫素是其它物體的前面還是後面,決定是否應該丟棄。這個階段也會檢查alpha值(alpha值定義了乙個物體的透明度)並對物體進行混合(blend)。所以,即使在片段著色器中計算出來了乙個畫素輸出的顏色,在渲染多個三角形的時候最後的畫素顏色也可能完全不同。

gl_points、gl_********s、gl_line_strip
頂點緩衝物件用來管理頂點資料的記憶體。它會在gpu記憶體(通常被稱為視訊記憶體)中儲存大量頂點。使用這些緩衝物件的好處是我們可以一次性的傳送一大批資料到顯示卡上,而不是每個頂點傳送一次。從cpu把資料傳送到顯示卡相對較慢,所以只要可能我們都要嘗試盡量一次性傳送盡可能多的資料。當資料傳送至顯示卡的記憶體中後,頂點著色器幾乎能立即訪問頂點,這是個非常快的過程。

###vao(vertex array object)

頂點陣列物件,繫結後任何頂點屬性的呼叫都會儲存在vao中。

索引緩衝物件:只儲存不同的頂點,並設定繪製這些頂點的順序

漸變效果只能渲染乙個屏,超過乙個屏重新渲染的問題

background linear gradient 404a59,0f1319 css背景色可以設定漸變樣式,但是這個漸變色只能渲染一屏的大小,超出一屏後會再次渲染 比如下圖 上面這個圖是開啟頁面之後剛好是渲染了一屏的漸變色,但是,當把頁面往下拉之後 頁面因為超出一屏之後再次渲染了顏色 解決方法 ...

乙個關於layui table渲染的問題

官網推薦方式是新建乙個table標籤,指定id 例如id pdotable 然後用 table.render 如此便可渲染乙個layui風格的table。在渲染成功後,我嘗試取id pdotable 的table進行操作,但是函式操作失效。反覆檢視,發現 邏輯無錯誤,檢查網頁元素發現,layui t...

渲染遊戲的第乙個視窗

2009年4月24日 遊戲第一步,先渲染乙個視窗,在程式中定義了自己的遊戲引擎,雖然很小,但是以後應該也是這樣的吧。在main函式中先initializeengine 定義引擎 是 bool initializeengine created3drenderer函式定義是bool created3dr...