WebGl 利用drawArrays、drawElements画三角形

效果:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebGl  利用drawArrays、drawElements画三角形</title>
</head>
<body>

<canvas id="myCanvas" width="500" height="300" style="border: 1px solid red"></canvas>

</body>
<script>

    window.onload = function () {

        //第1步 - 准备Canvas和获取WebGL的渲染上下文
        var canvas = document.getElementById(‘myCanvas‘),
            gl = canvas.getContext(‘webgl‘);

        //第2步 - 定义几何并将其存储在缓冲区对象
        var vertices = [
            -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];

        var vertex_buffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer);
        gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);

        var Index_Buffer = gl.createBuffer();
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, Index_Buffer);
        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);

        //第3步 - 创建和编译着色器程序
        var vertCode =
            ‘attribute vec3 coordinates;‘ +
            ‘void main(void) {‘ +
            ‘ gl_Position = vec4(coordinates, 1.0);‘ +
            ‘}‘;

        var fragCode = ‘void main(void) {‘ +
            ‘ gl_FragColor = vec4(1, 0.5, 0.0, 1);‘ +
            ‘}‘;

        var vertShader = gl.createShader(gl.VERTEX_SHADER);
        var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(vertShader,vertCode);
        gl.shaderSource(fragShader,fragCode);
        gl.compileShader(vertShader);
        gl.compileShader(fragShader);
        var shaderProgram = gl.createProgram();
        gl.attachShader(shaderProgram,vertShader);
        gl.attachShader(shaderProgram,fragShader);
        gl.linkProgram(shaderProgram);
        gl.useProgram(shaderProgram);

        //第4步 - 关联着色器程序到缓冲区对象
        var coord = 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:扇形绘制方式
    }

</script>
</html>

原文地址:https://www.cnblogs.com/zhinian-/p/10631438.html

时间: 2024-10-31 12:33:44

WebGl 利用drawArrays、drawElements画三角形的相关文章

WebGl 利用缓冲区对象画多个点

效果: 代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>WebGl 利用缓冲区对象画多个点</title> 6 </head> 7 <body> 8 9 <canvas id="myCanvas" width="500

css伪元素before/after和画三角形的搭配应用

想要实现的效果如下: 第一步:如何用css画出三角形? 1 /* css画三角形 */ 2 .sanjiao{ 3 width:0; 4 border-top:40px solid red; 5 border-bottom:40px solid green; 6 border-left:40px solid blue; 7 border-right:40px solid yellow; 8 } 9 10 <div class="sanjiao"> 11 </div&g

css3画三角形的原理

以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid blue; } 再给相应的div加上对应的class,一个如下的三角形就用css画好了

教你几何画板画三角形内切圆的方法

几何画板的几何绘图功能让其它几何绘图工具望尘莫及,它可以完全取代数学中的三角尺和圆规.下面我们就来看一看怎样用几何画板画三角形的内切圆. 具体操作如下: 选择“线段直尺工具”,构造出一个三角形ABC. 构造角平分线.依次选择点A.B.C,选择“构造”—“角平分线”命令,做出角ABC的角平分线.相同的方法作出角BAC的角平分线,注意选取点的顺序.点击两个角平分线的交点,命名为D. 构造垂线.选择点D.线段AB,选择“构造”—“垂线”命令.这条垂线与线段AB相交于点E. 绘制三角形内切圆.选中点D和

利用css样式画各种图形--初步、进阶、高级(一)

转文请注明:穆乙 http://www.cnblogs.com/pigtail/archive/2013/02/17/2914119.html 利用css画图形,是个有利有弊的写法,好处是不用画图,且节省了一些流量,坏处是要写长串的css样式,而且有可能流量并没有减少,用与否视情况而定,个人选择. 下面是我做测试的一些图形,也是参考了一些网站,简单的注解一下和归纳了一下,其中并没涉及到复杂的css画图形. 其中用了css3.0的一些属性,所以这里声明:请用支持css3.0的浏览器看此文章! 正方

转 css3画三角形的原理

转自  www.cnblogs.com/huangzhilong/p/5030659.html 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid blue; } 再给相应的div加上对应的class,一个如下的三角形就用css画好了 当时

用CSS border相关属性画三角形

效果 HTML: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>CSS Triangle Demo</title> <link rel="stylesheet" href="triangle.css"> </head> <body&g

使用CSS画三角形

很多时候我们会遇到需要应用三角形元素的场景,比如一个下拉菜单的交互提示: 或者一个页旁的装饰性标签: 实际上,给页面添加三角形的解决方案有很多,用CSS.SVG.Canvas,甚至用PS画一个贴上去都可以,但是我们在考虑解决方案时一定要选择最优的那个.可以肯定的是,当对三角形的功能需求比较简单和单一的时候,图片是首先被排除的方案.图片的难以维护性为页面的调试和修改都带来了一定的困难,所以当一个问题可以用代码来解决的时候我们一定要首先考虑它.再来考虑Canvas,尽管Canvas相对容易修改,但它

用DX9画三角形,三个顶点要求

用DX9画三角形,三个顶点的顺序有要求吗下面是全部代码,在 InitVB 函数中被注释掉的数组是我写的,没注释掉的是书上的代码,经过试验我的坐标不能显示出图形,而书上的坐标可以,这是为什么? #include<Windows.h> #include<tchar.h> #include<d3d9.h> #define null NULL #define RETURN return LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g