iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
Modern Web

寫給工程師的 WebGL 學習心得系列 第 9

[WebGL - Day09] Shader 的寫法規定與通則

這篇列舉了一些在看 Shader 語法時會看到的寫法一些通則與注意事項
有些瑣碎,約略知道即可

數值 0~1

寫 Shader 時,思考上有另一個很需要注意的部分
數值是 0~1

座標: 0~1,最邊邊是 0 與 1,而非整個 <canvas> 大小
顏色:白色不是 #ffffff,不是vec3(255.0, 255.0, 255.0),
而是 vec3(1.0, 1.0, 1.0);

顏色與座標會在後續討論到


一些通則

- Storage Qualifiers 變數命名習慣

昨天提到的幾種Storage Qualifiers,
其中 attributeuniformvaryings 這三種會跨到不同 Shader,
或是與 JavaScript 串接
在命名變數的時候,習慣會在變數前面再加 avu
可較直覺聯想這個變數是哪一種 Storage Qualifiers

attribute vec2 aPosition;
varying vec2 vUv;
uniform sampler2D uTexture;

- 寫 Vertex Shader 與 Fragment Shader 時的輸出

在寫 Vertex ShaderFragment Shader 時,
最後都有固定的輸出寫法:

  • WebGL
    單純 WebGL 專案時,
    在寫 Vertex Shader 時,最後須要輸出 gl_Position
    在寫 Fragment Shader 時,最後須要輸出 gl_FragColor

  • Shadertoy 或其他 WebGL JavaScript Library
    也有規定需要輸出的內容

雖然 gl_Position 與 gl_FragColor 是原生 WebGL 輸出的寫法,
但 WebGL JavaScript Library 可能會建議使用 Library 建議的輸出

- 各種數學公式

Shader 裡可以使用很多的數學公式
數學公式是最麻煩也最不可思議的部分
考量並不一定需要在這篇列出
系列文會用到幾個,會在實際用到的時候再做說明


上一篇
[WebGL - Day08] GLSL 型別與看懂 Shadertoy 建立時產生的程式
下一篇
[WebGL - Day10] Shadertoy - 座標與填上黑白
系列文
寫給工程師的 WebGL 學習心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言