5.绘制多点

news/2024/7/8 2:11:23

愿你出走半生,归来仍是少年!

        前面几个案例通过TS传入点参数实现绘制,但是每次的绘制都是单独绘制一个点,未实现一次绘制多个点的效果。该案例通过GL的Buffer实现一次绘制多点。

1.知识点

1.1.缓冲区绘制流程

        通过缓冲区对象处理数据时,大概遵循以下5个步骤

2.代码

<script setup lang="ts">
    import { onMounted, ref } from "vue";
    import Gl2Utility from "../../Gl/Gl2Utility";
    import VertexBufferUtility from "../../Gl/VertexBufferUtility";

    const a_PositionName = "a_Position";

    onMounted(() => {



        const gl2 = Gl2Utility.GetGl2("canvas");

        if (gl2 == null) {
            console.error("初始化失败!");

            return;
        }



        //顶点着色器源码
        const vertexShaderSource = `

        attribute vec4 ${a_PositionName};

            void main(){

                //给内置变量gl_PointSize赋值像素大小
                 gl_PointSize=20.0;

                 //顶点位置,位于坐标原点
                  gl_Position =a_Position;
            }

        `;

        const fragShaderSource = `
            void main(){
                //定义片元颜色
                gl_FragColor = vec4(1.0,0.0,0.0,1.0);
            }
        `;


        const program = Gl2Utility.InitShaders(gl2, vertexShaderSource, fragShaderSource);

        if (program == null) {
            return;
        }
        //获取参数位置
        const a_PositionLocation = gl2.getAttribLocation(program, a_PositionName);

        if (a_PositionLocation < 0) {
            console.error("获取参数失败!");

            return;
        }


        const count = VertexBufferUtility.InitFloatXY(gl2, program, a_PositionName, [0.0, 0.5, -0.5, -0.5, 0.5, -0.5]);

        //设置清除时的背景色
        gl2.clearColor(0., 0., 0., 1.);

        //清除
        gl2.clear(gl2.COLOR_BUFFER_BIT);
       
        //绘制点
        gl2.drawArrays(gl2.POINTS, 0, count);
         

    });




</script>

<template>

    <div class="demo_main">

        <canvas id="canvas"></canvas>
    </div>
</template>

<style scoped>

    #canvas {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        background-color: blue;
    }

    .demo_main {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
    }
</style>

3.效果

 

 


http://lihuaxi.xjx100.cn/news/1595792.html

相关文章

【高级rabbitmq】

文章目录 1. 消息丢失问题1.1 发送者消息丢失1.2 MQ消息丢失1.3 消费者消息丢失1.3.1 消费失败重试机制 总结 2. 死信交换机2.1 TTL 3. 惰性队列3.1 总结&#xff1a; 4. MQ集群 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息丢失问题 1.1…

如何优雅构建自定义 Spring Boot 验证器,让你的代码更加丝滑!

作为一名开发人员&#xff0c;你应该知道确保应用程序中流动的数据的准确性和完整性是多么重要。Spring Boot提供了强大的验证功能&#xff0c;但有时我们需要额外的验证&#xff0c;创建适合特定需求的自定义验证器。 接下来&#xff0c;我们来介绍下如何完整的创建一个自定义…

2023年中国产业互联网行业交易规模及发展前景分析:产业互联网价值快速显现,发展潜力将进一步释放[图]

产业互联网是基于互联网技术和生态&#xff0c;对各个垂直产业的产业链和内部的价值链进行重塑和改造&#xff0c;从而形成的互联网生态和形态。产业互联网是一种新的经济形态&#xff0c;利用信息技术与互联网平台&#xff0c;充分发挥互联网在生产要素配置中的优化和集成作用…

和力链携手纷享销客推动CRM业财一体化,引领大健康产业数智化发展

两化深度融合正在加速产业转型升级、重塑产业结构&#xff0c;为传统行业注入发展新活力&#xff0c;江西和力物联实业有限公司&#xff08;以下简称“和力链”&#xff09;正是这样一家推动医药大健康产业数智化发展的高新技术企业。 和力链是国内首家大健康供应链产能数字化…

张量-数据操作相关函数

tf.slice(input,begin,size,name None),该函数对输入的数据input进行切片分割操作。其中,参数begin是一个int32或int64类型的tensor,表示的是每一个维度的起始位置。size也是一个int32或int64类型的tensor,表示的是每个维度要取的元素个数。 示例代码如下: import tensorflo…

旁注、越权、跨库、CDN相关

旁注原理 在同一服务器上有多个站点&#xff0c;我们要攻击的这个站点假设没有漏洞&#xff0c;我们可以攻击服务器上的任意一个站点&#xff0c;这个就是旁注 多端口需要知道IP 可以用尖刀&#xff0c;fscan,goby 探测 IP逆向查询&#xff08;知道域名&#xff09; 可通过pin…

一篇概全,接口测试知识盲扫,真正的接口测试是如何做的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试的基本…

HTTP协议的不同版本及其新特性

HTTP/0.9 HTTP/0.9是最早的HTTP协议版本&#xff0c;于1991年发布。它具有以下特点&#xff1a; 只支持GET方法。不支持HTTP头部信息。响应只能是HTML文本。不支持状态码。 HTTP/1.0 HTTP/1.0于1996年发布&#xff0c;是HTTP协议的第一个正式版本。它具有以下特点&#xff…