当前位置:网站首页>Getting started with webgl (4)
Getting started with webgl (4)
2022-07-07 15:38:00 【Vegetable chicken on the road】
Use uniform Variable
The last section talked about , uniform Variables are mainly used for all vertices that are the same ( Vertex independent ) data . And attribute Variable passing is similar , The difference is uniform The target of the transfer is the slice shader .
example , Click the production point with the mouse , The position of the point is different in different quadrants, and the color of the point is different
// Vertex shader program
var VSHADER_SOURCE =
'attribute vec4 a_Position;\n'+
'void main() {\n' +
' gl_Position = a_Position ;\n' +
' gl_PointSize = 30.0;\n' +
'}\n';
// Chip shader program
var FSHADER_SOURCE =
'precision mediump float;\n'+
'uniform vec4 u_FragColor;\n'+
'void main() {\n' +
' gl_FragColor = u_FragColor;\n' +
'}\n';
function main() {
// obtain <canvas> Elements
var canvas = document.getElementById('webgl');
// obtain WebGL Rendering context
var gl = getWebGLContext(canvas);
if (!gl) {
console.log('Failed to get the rendering context for WebGL');
return;
}
// Initialize shaders
if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
console.log('Failed to intialize shaders.');
return;
}
var u_FragColor = gl.getUniformLocation(gl.program,"u_FragColor");
// obtain attribute Storage location
var a_Position = gl.getAttribLocation(gl.program,"a_Position");
if(a_Position < 0){
console.log(" Failed to get storage location !");
return;
}
// Register mouse response events
canvas.onmousedown = function(ev){click(ev,gl,canvas,a_Position,u_FragColor);};
// Pass the vertex position to attribute Variable
// gl.vertexAttrib1f(a_Position,0.0);
// gl.vertexAttrib2f(a_Position,0.0,0,0);
// gl.vertexAttrib3f(a_Position,0.0,0.0,0.0);
// Specify empty <canvas> The color of the
gl.clearColor(0.0, 0.0, 0.0, 1.0);
// Empty <canvas>
gl.clear(gl.COLOR_BUFFER_BIT);
}
var g_points = [];
var g_colors = [];
function click(ev,gl,canvas,a_Position,u_FragColor){
var x = ev.clientX;
var y = ev.clientY;
var rect = ev.target.getBoundingClientRect();
x = ((x-rect.left)-canvas.height/2)/(canvas.height/2);
y = (canvas.width/2-(y-rect.top))/(canvas.width/2);
g_points.push([x,y]);
if(x>=0.0&&y>=0.0){
g_colors.push([1.0,0.0,0.0,1.0]);
}else if(x<0.0&&y<0.0){
g_colors.push([1.0,0.5,0.0,1.0]);
}else{
g_colors.push([1.0,1.0,1.0,1.0]);
}
// Empty <canvas>
gl.clear(gl.COLOR_BUFFER_BIT);
var len = g_points.length;
for(var i = 0;i<len;i++){
var xy = g_points[i];
var rgba = g_colors[i];
gl.vertexAttrib3f(a_Position,xy[0],xy[1],0,0);
gl.uniform4f(u_FragColor,rgba[0],rgba[1],rgba[2],rgba[3]);
gl.drawArrays(gl.POINTS,0,1);
}
}
Declare in the slice shader uniform The precision is defined when variables precision mediump float
Define precision :
lowp、meduimp、highp They are low precision 、 Medium precision 、 High precision , The precision in vertices is very high, using the default high precision .
Fragment Shader uniform vec4 u_FragColor, Used uniform, It will make every vertex use the same value , Unless we change it , It is responsible for the color of each piece , There are four colors .
The process is :
(1) Declaration accuracy is precision mediump float Of uniform Variable ;
(2) Use getAttribLocation Method to get uniform The address of the variable ;
(3) Use uniform4f Method pass value .;
(4) draw .
The effect is as shown in the picture :
边栏推荐
- Bits and Information & integer notes
- jacoco代码覆盖率
- Do not use memset to clear floating-point numbers
- 【數據挖掘】視覺模式挖掘:Hog特征+餘弦相似度/k-means聚類
- 【数字IC验证快速入门】20、SystemVerilog学习之基本语法7(覆盖率驱动...内含实践练习)
- A need to review all the knowledge, H5 form is blocked by the keyboard, event agent, event delegation
- Introduction of mongod management database method
- Create lib Library in keil and use lib Library
- Write a ten thousand word long article "CAS spin lock" to send Jay's new album to the top of the hot list
- @ComponentScan
猜你喜欢

Keil5 does not support online simulation of STM32 F0 series

Niuke real problem programming - Day17

【搞船日记】【Shapr3D的STL格式转Gcode】
![[quick start of Digital IC Verification] 22. Ahb-sramc of SystemVerilog project practice (2) (Introduction to AMBA bus)](/img/3f/40475f9f6e0fcd3f58c93164f65674.png)
[quick start of Digital IC Verification] 22. Ahb-sramc of SystemVerilog project practice (2) (Introduction to AMBA bus)

Write a ten thousand word long article "CAS spin lock" to send Jay's new album to the top of the hot list
![[understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper](/img/38/cc5bb5eaa3dcee5ae2d51a904cf26a.png)
[understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper

从 1.5 开始搭建一个微服务框架链路追踪 traceId

Niuke real problem programming - day20
使用Scrapy框架爬取网页并保存到Mysql的实现

Steps to create P8 certificate and warehousing account
随机推荐
Oracle控制文件丢失恢复归档模式方法
【数字IC验证快速入门】22、SystemVerilog项目实践之AHB-SRAMC(2)(AMBA总线介绍)
[quick start of Digital IC Verification] 18. Basic grammar of SystemVerilog learning 5 (concurrent threads... Including practical exercises)
Ctfshow, information collection: web8
Use cpolar to build a business website (2)
写一篇万字长文《CAS自旋锁》送杰伦的新专辑登顶热榜
How to create Apple Developer personal account P8 certificate
CTFshow,信息搜集:web5
Pat grade a 1103 integer factorizatio
[server data recovery] a case of RAID data recovery of a brand StorageWorks server
2.Golang基础知识
MySQL bit type resolution
[quickstart to Digital IC Validation] 20. Basic syntax for system verilog Learning 7 (Coverage Driven... Including practical exercises)
【兰州大学】考研初试复试资料分享
CTFshow,信息搜集:web2
Change win10 Screensaver
The bank needs to build the middle office capability of the intelligent customer service module to drive the upgrade of the whole scene intelligent customer service
Unity之ASE实现全屏风沙效果
What is Base64?
Create lib Library in keil and use lib Library