最近想做一些渲染的東西,接觸到了幾何著色器,發現了幾何著色器的強大之處,幾何著色器位於頂點和片元著色器之間,幾何著色器能夠產生0個以上的基礎圖元,它能起到一定的裁剪作用、同時也能產生比頂點著色器輸入更多的基礎圖元。
它可以做的事情非常的酷炫,例如:表面法線的視覺化和實現三維物體的**效果。
基本知識:
輸入可以有如下:
輸出如下:
max_vertices 代表輸出的最大頂點數量,超過這個數量,opengl將不再繪製多出的頂點。
幾何著色器中emitvertex表示輸出乙個頂點,而endprimitive表示結束乙個圖元的輸出,這是一對命令。gl_in是內建輸入變數,定義為,這個是我們可以直接使用的:
in gl_pervertex
gl_in;
具體例項:
layout(points) in ;
layout(points, max_vertices = 1) out;
void main()
上面的例子表示,每次的輸入只有乙個點,對應的繪圖模式是gl_points, 該幾何著色器輸出的結果是乙個點圖元。
繪製兩個點:
修改輸出圖元型別:
#version 330 core
layout(points) in ;
layout(line_strip, max_vertices = 2) out;
void main()
這裡我們輸出了兩個點,把乙個點擴充成乙個直線圖元。如下圖:
我們可以實現更多的拓展,從而實現一些酷炫的效果。
表面著色器一
在su ce shader當中不需要編寫pass通道,su ce shader就是對vertex shader和fragment shader的一種包裝。它主要可以用來生成 所以生成的過程不需要進行干預,因此pass通道也能夠幫我們自動生成,不需要去新增pass通道。一 建立的shader的 sha...
DX12 混合和幾何著色器
第十章及第十二章 混合兩步即可實現 首先建立乙個pipeline stage d3d12 graphics pipeline state desc transparentpsodesc opaquepsodesc d3d12 render target blend desc transparency...
一 WebGL 著色器和繪製
var vshader source void main 型別和變數名字 var fshader source void main param mode 繪製模式 gl.points,gl.lines,gl.line strip,gl.line loop param first 從哪個點開始繪製 p...