返回顶部
首页 > 资讯 > 前端开发 > JavaScript >glsl_buffer实现渐变三角形方法详解
  • 616
分享到

glsl_buffer实现渐变三角形方法详解

glsl buffer渐变三角形glsl buffer渐变 2023-05-14 05:05:56 616人浏览 泡泡鱼
摘要

目录正文三角形创建一个buffer传递数据分析三角形buffer数据及着色器信息buffer赋值attribute绘制三角形效果结语正文 上篇文章我简单封装了一个glsl的程序类,

正文

上篇文章我简单封装了一个glsl的程序类,并简单介绍了glsl的一些通信方式。这篇文章我们主要来介绍glsl中buffer的使用,结合上一篇文章中的attributevarying来实现一个渐变色的三角形~

三角形

我们通过glsl画一个三角形需要的是三个坐标系中的点,三点成面。而我们在使用glsl画一个动态点用到的是vertexAttrib2fvertexShader传递位置坐标,通过drawArrays绘制点。绘制一个三角形也是类似的思想,但是多顶点我们就不能以vertexAttrib2f的形式传递参数,这时我们就要用到buffer,下面通过代码详细介绍buffer~

创建一个buffer

第一步我们需要创建一个buffer容器并绑定它

//创建一个buffer
let buffer = gl.createBuffer();
//绑定buffer
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

传递数据

通过Float32Array对象创建一个点位信息组合,并传递到buffer中

let vertices = [
    ......
];
vertices = new Float32Array(vertices); //创建一个float对象
//传数据
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

分析

我们实现一个三角形需要的是三个二维的坐标点,所以我们需将vertices中的数据以俩俩一组的形式呈现。如何实现渐变呢? 我们不仅要存顶点位置信息也要存颜色rab信息,所以我们在vertices中需以5个float为一组传递给attribute。下面我们来实现一下代码~

三角形buffer数据及着色器信息

let vertices = [
  -0.5,
  0.0,
  1.0,
  0.0,
  0.0, //顶点1
  0.0,
  0.8,
  0.0,
  1.0,
  0.0, //顶点2
  0.5,
  0.0,
  0.0,
  0.0,
  1.0, //顶点3
];
//顶点着色器,声明a_position和a_Color的attribute属性,v_Color的varying属性
let vertexShader = ` 
  attribute vec2 a_position;
  attribute vec3 a_Color;
  varying vec3 v_Color;
  void main(){
    v_Color = a_Color;
    gl_Position = vec4(a_position,0.0,1.0);
  }
`;
//片源着色器
let fragmentShader = `
    precision mediump float;
    varying vec3 v_Color;
    void main() {
     gl_FraGColor = vec4(v_Color,1.0);
    }
`;

buffer赋值attribute

这里用到了glsl通信相关知识,我就不做展开,不了解的可以查看我的第一篇glsl开篇文章中有详细介绍~ 这里需要获取到attribute的内存地址,并将buffer中的数据传递给attribute。这里面有一些注意点,由于我们采用5个float一组的形式,前两位是位置信息、后三位存储颜色rgb,所以在传递前我们需告知attribute一组有几位且从第几位开始拾取~

let FSIZE = vertices.BYTES_PER_ELEMENT; //每一个值占用多少字节 float32为4字节

//把buffer赋值给attribute
let a_position = gl.getAttribLocation(webGL.program, "a_position");
let a_Color = gl.getAttribLocation(WEBgl.program, "a_Color");
gl.vertexAttribPointer(
  a_position, //vertexshader里面的变量的地址
  2, //size:attribute变量的长度(几个一组)
  gl.FLOAT, //数据类型 float
  false, //归一化 相当于length等于1
  FSIZE * 5, //stride:每个点(组)的信息所占用的字节BYTES
  0 // offset:偏移(从第几个开始)
);
gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE * 5, FSIZE * 2);
//确认赋值
gl.enableVertexAttribArray(a_position);
gl.enableVertexAttribArray(a_Color);

绘制三角形

完成上方的buffer绑定以及传递attribute后,我们只需最后绘制三角形就行了~

//画三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

效果

结语

本系列作为glsl入门系列,本人也才接触glsl语言,后续会根据学习进度不断更新,更多关于glsl buffer渐变三角形的资料请关注编程网其它相关文章!

--结束END--

本文标题: glsl_buffer实现渐变三角形方法详解

本文链接: https://lsjlt.com/news/202780.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • glsl_buffer实现渐变三角形方法详解
    目录正文三角形创建一个buffer传递数据分析三角形buffer数据及着色器信息buffer赋值attribute绘制三角形效果结语正文 上篇文章我简单封装了一个glsl的程序类,...
    99+
    2023-05-14
    glsl buffer渐变三角形 glsl buffer渐变
  • glsl buffer如何实现渐变三角形
    本文小编为大家详细介绍“glsl_buffer如何实现渐变三角形”,内容详细,步骤清晰,细节处理妥当,希望这篇“glsl_buffer如何实现渐变三角形”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。三角形我们通过...
    99+
    2023-07-05
  • css3线性渐变怎么实现三角形
    这篇文章主要介绍了css3线性渐变怎么实现三角形的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css3线性渐变怎么实现三角形文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 纯CSS实现圆角三角形的方法有哪些
    本篇内容主要讲解“纯CSS实现圆角三角形的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“纯CSS实现圆角三角形的方法有哪些”吧!法一. 全兼容的 SV...
    99+
    2024-04-02
  • css3实现三角形的方法有哪些
    这篇文章主要讲解了“css3实现三角形的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3实现三角形的方法有哪些”吧! ...
    99+
    2024-04-02
  • Android编程实现带渐变效果的圆角矩形示例
    本文实例讲述了Android编程实现带渐变效果的圆角矩形。分享给大家供大家参考,具体如下:public class RoundRectsActivity extends Activity { @Override protected vo...
    99+
    2023-05-30
    android 渐变 圆角矩形
  • CSS3圆角和渐变2种常用功能的实现方法
    本篇内容介绍了“CSS3圆角和渐变2种常用功能的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Cs...
    99+
    2024-04-02
  • CSS3中渐变的实现方法
    本篇内容主要讲解“CSS3中渐变的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3中渐变的实现方法”吧!1、线性渐变语法:background: ...
    99+
    2024-04-02
  • CSS实现左上朝向三角形的方法有哪些
    本篇内容主要讲解“CSS实现左上朝向三角形的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS实现左上朝向三角形的方法有哪些”吧!第一种:#triangle-topleft ...
    99+
    2023-07-05
  • 纯css实现小箭头或三角形标志的方法
    小编给大家分享一下纯css实现小箭头或三角形标志的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!实现小箭头:.arrow{    width: 20px; &...
    99+
    2023-06-08
  • C语言实现打印杨辉三角的方法详细(三种方法)
    目录题目描述问题分析1. 使用数组法(打印直角三角)2. 使用数组法(打印等腰三角)3. 使用公式法(打印等腰三角)网上参考题目描述 打印杨辉三角(前N行) 问题分析 杨辉三角是中国...
    99+
    2024-04-02
  • ps渐变透明效果的实现方法
    这篇文章给大家分享的是有关ps渐变透明效果的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建矩形选区,crl c+crl v创建新的图层稍微调整亮点。双击矩形图层,调整图层调整面板,进行阴影。用选区工具...
    99+
    2023-06-14
  • android实现圆角矩形背景的方法
    本文实例讲述了android实现圆角矩形背景的方法。分享给大家供大家参考。具体如下: 1. java代码如下: import android.graphics.Canvas;...
    99+
    2022-06-06
    方法 Android
  • Android中图片圆角三种实现方法
    目录方法一方法二方法三Android 开发中,经常需要对图片进行二次处理,比如添加圆角效果 或 显示圆形图片; 方法一 通过第三方框架 Glide 设置圆角效果; 写法1: Requ...
    99+
    2024-04-02
  • CSS3中线性颜色渐变的实现方法
    本篇内容介绍了“CSS3中线性颜色渐变的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为了显示一个...
    99+
    2024-04-02
  • CSS3中颜色线性渐变的实现方法
    这篇文章主要讲解了“CSS3中颜色线性渐变的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS3中颜色线性渐变的实现方法”吧!线性渐变可以设置3个...
    99+
    2024-04-02
  • 如何实现三角形向下方向垂直翻转效果
    本篇内容介绍了“如何实现三角形向下方向垂直翻转效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!XML/H...
    99+
    2024-04-02
  • android中实现背景图片颜色渐变方法
    常用,记录一下。 效果图: 首先新建xml文件  bg_gradient.xml 代码如下: <?xml version="1.0" encod...
    99+
    2022-06-06
    方法 图片 背景图 Android
  • CSS3中使用gradient实现渐变效果的方法
    本篇内容主要讲解“CSS3中使用gradient实现渐变效果的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS3中使用gradient实现渐变效果的方法...
    99+
    2024-04-02
  • 使用CSS实现文本渐变效果的方法
    使用CSS实现文本渐变效果的方法在网页设计中,为了让页面达到更好的视觉效果,我们经常会运用一些渐变效果来美化文本。而CSS是实现这一目的的强大工具之一。下面,我们将介绍一些使用CSS实现文本渐变效果的方法,并提供对应的具体代码示例。使用线性...
    99+
    2023-11-21
    实现 关键词:CSS 文本渐变
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作