幾何著色器(一) 基本概念

2021-08-20 02:42:37 字數 1114 閱讀 5034

最近想做一些渲染的東西,接觸到了幾何著色器,發現了幾何著色器的強大之處,幾何著色器位於頂點和片元著色器之間,幾何著色器能夠產生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...