WebGL编程笔记2:uniform变量使用
生活随笔
收集整理的這篇文章主要介紹了
WebGL编程笔记2:uniform变量使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<canvas id="myCanvas" width="600" height="300"></canvas>
const vertex = `
precision lowp float;
attribute vec3 vertexPosition;
void main(void) {
gl_Position = vec4(vertexPosition, 1.0);
}
`;
const fragment = `
precision lowp float;
uniform vec4 color;
void main(void) {
gl_FragColor = color;
}
`;
let canvas = document.getElementById('myCanvas');
let webgl = canvas.getContext('webgl');
const data_position = new Float32Array([
// x y z r g b a
-0.5, 0.5, 0.0, 0.9, 0.0, 0.0, 1.0,
+0.5, 0.5, 0.0, 0.0, 0.8, 0.0, 1.0,
+0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0,
-0.5, -0.5, 0.0, 1.0, 1.0, 1.0, 1.0
]);
const data_index = new Uint16Array([
0, 1, 2,
0, 2, 3
]);
const FSIZE = data_position.BYTES_PER_ELEMENT;
webgl.clearColor(0, 1, 0, 1);
webgl.clear(webgl.COLOR_BUFFER_BIT);
// 第一步:編譯Shader程序,并創建program
let program = createProgram(webgl, vertex, fragment);
// 第二步:創建數據緩沖區和索引緩沖區
let buffer_position = bindBufferWidthData(webgl, webgl.ARRAY_BUFFER, data_position); // 將頂點數據寫入數據緩沖區并啟用
let buffer_index = bindBufferWidthData(webgl, webgl.ELEMENT_ARRAY_BUFFER, data_index); // 將索引數據寫入沖區并啟用
// 第三步: 未Shader中的輸入變量定義指針的,并分配取數位置
let vertexPosition = bindVertexAttributePointer(webgl, program, "vertexPosition", 3, webgl.FLOAT, false, FSIZE * 7, 0); // 每次從buffer中取28個字節,從這一段字節中的offset=0字節開始取3個浮點數
// 設置全局變量color
let color = webgl.getUniformLocation(program, 'color');
webgl.uniform4f(color, 1, 0, 0, 1); // r g b a
// 開始繪制
webgl.drawElements(webgl.TRIANGLES, 6, webgl.UNSIGNED_SHORT, 0);
總結
以上是生活随笔為你收集整理的WebGL编程笔记2:uniform变量使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python牛顿迭代法求平方根_牛顿迭代
- 下一篇: python右键没有idle编辑了_py