我在NTNU開設WebGL課程。我目前正在探索着色器的功能以及如何使用它們。是否可以在WebGL中每次繪製調用時運行一次代碼?
我們已經向我們展示了一個例子,我們計算投影矩陣,然後將其設置在頂點着色器中,然後進行繪製調用。我想試着在着色器中做這個矩陣計算。
這意味着我必須將代碼放在頂點着色器中的main()
函數以外的位置,因爲每次繪製調用都會調用該函數多次。
頂點着色器:
uniform vec3 camRotation;
attribute vec3 position;
void main() {
// I want this code to run only once per draw call
float rX = camRotation[0];
float rY = camRotation[1];
float rZ = camRotation[2];
mat4 camMatrix = mat4(
cos(rY) * cos(rZ), cos(rZ) * sin(rX) * sin(rY) - cos(rX) * sin(rZ), sin(rX) * sin(rZ) + cos(rX) * cos(rZ) * sin(rY), 0, //
cos(rY) * sin(rZ), cos(rX) * cos(rZ) + sin(rX) * sin(rY) * sin(rZ), cos(rX) * sin(rY) * sin(rZ) - cos(rZ) * sin(rX), 0, //
-sin(rY), cos(rY) * sin(rX), cos(rX) * cos(rY), 0, //
0, 0, 0, 1
);
// End of code in question
gl_Position = camMatrix * vec4(position, 1);
gl_PointSize = 5.0;
}
這可能嗎?我是一個傻瓜嗎?
您可能會發現[這些文章有用](http://webglfundamentals.org) – gman