java canvas 画三角形_WebGl 利用drawArrays、drawElements画三角形

本文详细介绍如何使用WebGL通过drawArrays和drawElements方法来绘制三角形。文章首先介绍了设置WebGL上下文的方法,接着展示了如何定义顶点坐标和索引,并将其存储在缓冲区对象中。随后,通过创建和编译着色器程序完成准备工作。最终,通过drawElements方法绘制带有索引的三角形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebGl 利用drawArrays、drawElements画三角形

varcanvas=document.getElementById('myCanvas'),

gl=canvas.getContext('webgl');//第2步 - 定义几何并将其存储在缓冲区对象

varvertices=[-0.5,0.5,0.0,0.0,0.5,0.0,-0.25,0.25,0.0,0.5,0.5,0.0,0.25,0.25,0.0,

],

indices=[0,1,2,1,3,4];varvertex_buffer=gl.createBuffer();

gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer);

gl.bufferData(gl.ARRAY_BUFFER,newFloat32Array(vertices),gl.STATIC_DRAW);varIndex_Buffer=gl.createBuffer();

gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, Index_Buffer);

gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,newUint16Array(indices), gl.STATIC_DRAW);//第3步 - 创建和编译着色器程序

varvertCode=

'attribute vec3 coordinates;' +

'void main(void) {' +

'gl_Position = vec4(coordinates, 1.0);' +

'}';varfragCode= 'void main(void) {' +

'gl_FragColor = vec4(1, 0.5, 0.0, 1);' +

'}';varvertShader=gl.createShader(gl.VERTEX_SHADER);varfragShader=gl.createShader(gl.FRAGMENT_SHADER);

gl.shaderSource(vertShader,vertCode);

gl.shaderSource(fragShader,fragCode);

gl.compileShader(vertShader);

gl.compileShader(fragShader);varshaderProgram=gl.createProgram();

gl.attachShader(shaderProgram,vertShader);

gl.attachShader(shaderProgram,fragShader);

gl.linkProgram(shaderProgram);

gl.useProgram(shaderProgram);//第4步 - 关联着色器程序到缓冲区对象

varcoord=gl.getAttribLocation(shaderProgram,'coordinates');

gl.vertexAttribPointer(coord,3,gl.FLOAT,false,0,0);

gl.enableVertexAttribArray(coord);//第5步 - 绘制所需的对象

gl.clearColor(0.5,0.5,0.5,0.9);

gl.enable(gl.DEPTH_TEST);

gl.clear(gl.COLOR_BUFFER_BIT);

gl.viewport(0,0,myCanvas.width,myCanvas.height);//gl.drawArrays(gl.TRIANGLES, 0, 3)//画简单的三角形 此方法不需要索引

//gl.drawArrays(gl.TRIANGLES, 0, 6)//如果下需要画两个三角形 那么vertices数组中需要增加一个点

gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT,0);//利用drawElements画三角形

//画矩形 更改indices即可

//绘图模式如下:

//gl.POINTS:要绘制一系列的点

//gl.LINES:要绘制了一系列未连接直线段(单独行)

//gl.LINE_STRIP:要绘制一系列连接的线段

//gl.LINE_LOOP:要绘制一系列连接的线段。它还连接的第一和最后的顶点,以形成一个环

//TRIANGLES:一系列单独的三角形;绘制方式:(v0,v1,v2),(v1,v3,v4)

//TRIANGLE_STRIP:一系列带状的三角形

//TRIANGLE_FAN:扇形绘制方式

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值