美文网首页
webgl 9.画一个圆

webgl 9.画一个圆

作者: lesliefang | 来源:发表于2017-08-28 09:36 被阅读174次

前面我们学习了复杂的物体都可以由多个三角形组成。所以可以用多个三角形去拟合一个圆形。

draw_circle.png cricle.jpeg

如图我们可以把圆等分成 N 份,用 N 个三角形去拟合圆。
设圆上任意一个点跟 y 轴的夹角为 θ, 可得到点的坐标为 (rsin(θ), rcos(θ)), 而 θ 的取值范围是 [0,2π]。

var N = 100;
var vertexData = [0.0, 0.0];
var r = 0.5;

for (var i = 0; i <= N; i++) {
    var theta = i * 2 * Math.PI / N;
    var x = r * Math.sin(theta);
    var y = r * Math.cos(theta);
    vertexData.push(x, y);
}

N = 100, 用 101 个点(第 1 个点和第 101 个点重合)把圆等分成 100 个三角形。加上原点用 gl.TRIANGLE_FAN 画扇形就可以了。

完整代码如下:

 // vertex shader
var VERTEX_SHADER_SOURCE =
    'attribute vec4 a_Position;\n' +

    'void main() {\n' +
    '   gl_Position = a_Position;\n' +
    '}\n';

// fragment shader
var FRAGMENT_SHADER_SOURCE =
    'void main() {\n' +
    '   gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n' +
    '}\n';

var canvas = document.getElementById("canvas");
var gl = canvas.getContext('webgl');

if (!initShaders(gl, VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE)) {
    alert('Failed to init shaders');
}


var N = 100;
var vertexData = [0.0, 0.0];
var r = 0.5;

for (var i = 0; i <= N; i++) {
    var theta = i * 2 * Math.PI / N;
    var x = r * Math.sin(theta);
    var y = r * Math.cos(theta);
    vertexData.push(x, y);
}

var vertices = new Float32Array(vertexData);
initVertexBuffers(gl, vertices);

gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLE_FAN, 0, vertices.length / 2);

后面我们还会用同样的方法画一个球体。

查看源码

相关文章

  • webgl 9.画一个圆

    前面我们学习了复杂的物体都可以由多个三角形组成。所以可以用多个三角形去拟合一个圆形。 如图我们可以把圆等分成 N ...

  • WebGL(画一个点)

    什么是WebGL WebGL使得在支持HTML的canvas标签的浏览器中,不需要安装任何插件,便可以使用基于Op...

  • 初学者怎么去画“肥皂泡”

    如何画一个shabon 1.画一个圆 首先,在线条画图层上画一个圆。 这次,我正在使用CLIP STUDIO的同心...

  • canvas基本操作

    画一条直线 画一个矩形 画一个三角形 画一个圆

  • 9. WebGL performance considerati

    WebGL性能考虑 WebGL可以期望什么样的性能? 这有点难以回答,因为它取决于很多因素。 一般来说,您可以假定...

  • 画一个圆

    世界是一个圆。 世界有时候很大,有时候又很小。走了好大一圈,又会再遇见。 也许外部的世界,现实的生活,有时候不尽如...

  • WebGL 的 Hello World

    本文整理自 div 侠于 凹凸 2022 年技术分享,简单介绍了 WebGL 画一个基础图形的流程,希望你了解之后...

  • webgl 3.画一个点

    对于初学者来说 initShaders 的具体实现可以先忽略,这个方法主要是编译链接 shader 的。仔细读一遍...

  • webgl 8.画一个正方形

    前面我们说 webgl 只能画点、线、三角形 3 种基本图形,那么我想画一个球,画一个宇宙飞船怎么办呢?图形学中复...

  • 中秋,画一个圆

    穿过薄云的月光 烙印在大地上 一个,一个,孤单的身影 是昨日的等待 是今夜的相思 / 吹落黄叶的秋风 吟唱在夜色里...

网友评论

      本文标题:webgl 9.画一个圆

      本文链接:https://www.haomeiwen.com/subject/ayewdxtx.html