webGL编程指南 第五章 MultiAttributeColorjs.js

这篇具有很好参考价值的文章主要介绍了webGL编程指南 第五章 MultiAttributeColorjs.js。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我会持续更新关于wegl的编程指南中的代码。

当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助

git代码地址 :空

上一章节中只要使用了同一个buffer传递,位置与点的大小。

本案例中我们将学习新的varying。次变量可以对顶点进行赋值文章来源地址https://www.toymoban.com/news/detail-741225.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <canvas id='canvas'></canvas>
    <script>
        let canvas = document.getElementById('canvas');
        let gl = canvas.getContext('webgl');
        //顶点着色器
        let vertexShaderSource = `
            attribute vec4 a_Position;
            attribute vec4 a_Color;
            varying vec4 v_Color;
            void main(){
                gl_Position = a_Position; 
                gl_PointSize = 10.0;
                v_Color = a_Color;
            }
        `
        //片元着色器
        let fragmentShaderSouce = `
            precision mediump float;
            varying vec4 v_Color;
            void main(){
                gl_FragColor = v_Color;
            }
        `
        //  创建顶点着色器
        let vertexShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vertexShader, vertexShaderSource)
        gl.compileShader(vertexShader)
        //创建片元着色器
        let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fragmentShader, fragmentShaderSouce)
        gl.compileShader(fragmentShader)
        //创建渲染程序
        let program = gl.createProgram();
        gl.attachShader(program, vertexShader);
        gl.attachShader(program, fragmentShader);
        gl.linkProgram(program);
        //使用当前渲染程序
        gl.useProgram(program)


        //检查片元着色器的是否正确
        if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
            throw gl.getProgramInfoLog(program);
        }
        //三角形的坐标
        let verticesColors = new Float32Array([
            0.0,0.5,1.0,0.0,0.0, // 第一个三角形
            -0.5,-0.5,0.0,1.0,0.0, // 第二个三角形
            0.5,-0.5,0.0,0.0,1.0, // 第三个三角形
        ])
        var n = 3; // 顶点的个数 
        let size = verticesColors.BYTES_PER_ELEMENT
        //位置坐标变量
        let a_Position = gl.getAttribLocation(program, 'a_Position'); 
        //颜色
        let a_Color = gl.getAttribLocation(program, 'a_Color');

        //创建坐标的buffer
        let buffer = gl.createBuffer();
        //绑定buffer
        gl.bindBuffer(gl.ARRAY_BUFFER, buffer)
        //将三角形的坐标数据放入缓冲区
        gl.bufferData(gl.ARRAY_BUFFER, verticesColors, gl.STATIC_DRAW)
        // a_Position 赋值
        gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, size*5, 0);
        // 启用a_Position
        gl.enableVertexAttribArray(a_Position);

        //创建顶点大小的buffer
        let colorBuffer = gl.createBuffer();
        //绑定buffer
        gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
        // 将点的颜色数据放入缓冲区
        gl.bufferData(gl.ARRAY_BUFFER, verticesColors, gl.STATIC_DRAW);
        // a_Color 赋值
        gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false,  size*5, size*2)
        // 启用a_Color
        gl.enableVertexAttribArray(a_Color);
        //绘制
        gl.clearColor(0.0, 0.0, 0.0, 1.0);
        gl.clear(gl.COLOR_BUFFER_BIT);
        //绘制点  从第0个开始,绘制4次
        gl.drawArrays(gl.POINTS, 0, n)

    </script>
</body>

</html>

到了这里,关于webGL编程指南 第五章 MultiAttributeColorjs.js的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ Primer Plus第五章编程练习答案

    答案仅供参考,实际运行效果取决于运行平台和运行软件 1.编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和则程序将出29之间所有整数的和为44 2.使用array对

    2024年02月09日
    浏览(49)
  • 曲线艺术编程 coding curves 第五章 谐波图形(谐振图形) HARMONOGRAPHS

    原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http://cnblogs.com/willian/ 源码:github: https://github.com/willian12345/coding-curves 曲线艺术编程系列第 5 章 这一篇幅建立在对第四章利萨茹曲线的讨论之上。事实上谐波图形并不是一类曲线,它是一

    2024年02月08日
    浏览(35)
  • Linux高性能服务器编程 学习笔记 第五章 Linux网络编程基础API

    我们将从以下3方面讨论Linux网络API: 1.socket地址API。socket最开始的含义是一个IP地址和端口对(ip,port),它唯一表示了使用TCP通信的一端,本书称其为socket地址。 2.socket基础API。socket的主要API都定义在sys/socket.h头文件中,包括创建socket、命名socket、监听socket、接受连接、发

    2024年02月07日
    浏览(53)
  • Liunx shell编程及自动化运维实现--第五章三剑客

    正则表达式(RE)是一种字符模式,用于再查找过程中匹配指定的字符,在大多数程序中,正则表达式都被置于两个正斜杠之间:例如//就是由正斜杠界定的正则表达式,他将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符时最重要的概念。 定义:元字

    2024年02月21日
    浏览(39)
  • webGL编程指南实战教程

    学习路线: 如果你是在校大学生,有足够的时间去学习:前端数学(几何+线性代数)图形学webglshader threejsthree.js源码 如果你是工作中使用,需要快速出产成品:前端threeJs。 教程主要分为四大部分: webgl容器(坐标系) webgl渲染管线 webgl关键名词 案例实战 在2D绘图环境中的

    2024年02月03日
    浏览(31)
  • 第五章:IO设备

    什么是IO设备? “1/0”就是“输入/输出” (Input/Output) IO 设备就是可以 将数据输入到计算机 ,或者可以 接收计算机输出数据 的外部设备,属于计算机中的硬件部件。 按使用特性分类 按传输速率分类 按信息交换的单位分类 IO 设备的电子部件(IO控制器) CPU无法直接控制 I

    2024年02月16日
    浏览(23)
  • 第五章 常用类

    QString 是Qt中的 字符串类 ,QString使用 Unicode编码 。 C和C++使用的ASCII编码中,一个字符是8位的char,但是在Qt中因为使用的时候QString,因此字符串中的每个字符是一个16位的QChar, 完美支持中文。 QString可以通过下面的函数完成与数字之间的转换。 QString QString::number(int n, int b

    2024年02月04日
    浏览(22)
  • 第五章 图像处理

    本章讲讲解图像处理相关内容,包括图像金字塔、图像轮廓模板提取、直方图、图像傅里叶变换等。 含义: 图像金字塔是一种用于图像处理和计算机视觉的技术。它是一系列图像的集合,其中每个图像比前一个图像分辨率更低, 从而形成一种金字塔形的结构。这些图像可以由

    2024年02月05日
    浏览(47)
  • C国演义 [第五章]

    力扣链接 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 示例 2: 输入:nums = [0] 输出:[[],[0]] 提示:

    2024年02月09日
    浏览(28)
  • 五,Eureka 第五章

                      7.3.2.注册中心Eureka Server7001

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包