9.变换之平移

news2024/11/19 9:35:18

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

        通过顶点着色器实现图形的整体平移。

1.知识点

1.1.齐次坐标

        在GLSL 中Vec4进行坐标表达时,作为齐次坐标(x,y,z,w).当w=1时,这个vec4可以表达一个点的三维坐标。在进行平移时,应保证偏移量的W为0。

1.2矢量相加运算

        在GLSL中提供了矢量相加运算,在进行平移时可通过矢量相加,进行图形的整体平移。

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";

    const u_MoveName = "u_Move";

    onMounted(() => {



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

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

            return;
        }



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

        attribute vec4 ${a_PositionName};

        uniform vec4 ${u_MoveName};

            void main(){

                 //顶点位置,位于坐标原点
                  gl_Position =a_Position+${u_MoveName};
            }

        `;

        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);

        const u_MoveLocation = gl2.getUniformLocation(program, u_MoveName);

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

            return;
        }

        gl2.uniform4f(u_MoveLocation, 0.5, 0.5, 0., 0.);

        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.TRIANGLES, 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://www.coloradmin.cn/o/1066083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue面试题三】、Vue中的v-show 和 v-if 怎么理解 ?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;v-show和v-if有什么区别…

Linux防火墙之--SNAT和DNAT

1.SNAT是什么 SNAT又称源地址转换。源地址转换是内网地址向外访问时&#xff0c;发起访问的内网ip地址转换为指定的ip地址&#xff08;可指定具体的服务以及相应的端口或端口范围&#xff09;&#xff0c;这可以使内网中使用保留ip地址的主机访问外部网络&#xff0c;即内网的多…

VR模拟鸡胚培养接种实验,打造沉浸式的学习环境

在医学教育领域&#xff0c;传统的鸡胚接种实验一直是教学的重要组成部分。然而&#xff0c;这种实验方法存在一定的局限性&#xff0c;如操作难度大、成本高、安全隐患等。为了解决这些问题&#xff0c;越来越多的教育机构开始尝试引入虚拟现实(VR)技术&#xff0c;以模拟鸡胚…

Safran与是德科技合作推出基于GNSS技术的5G LBS方案

概述 虹科Safran与是德科技&#xff08;Keysight&#xff09;联手推进基于全球导航卫星系统&#xff08;GNSS&#xff09;技术的5G定位服务&#xff08;LBS&#xff09;&#xff0c;利用虹科Safran先进的全球导航卫星系统&#xff08;GNSS&#xff09;仿真功能扩展是德科技的5G…

成为黄金代理,必须考虑到这一点

目前很多投资者都会选择黄金代理进行现货黄金投资账户的开立。一方面是市场中各种各样的现货黄金代理&#xff0c;越来越专业&#xff0c;提供的交易服务越来越好&#xff0c;另一方面是黄金代理和黄金平台进行合作&#xff0c;如果平台选得好&#xff0c;投资者在平台开户还是…

深入探究 C++ 编程中的资源泄漏问题

目录 1、GDI对象泄漏 1.1、何为GDI资源泄漏&#xff1f; 1.2、使用GDIView工具排查GDI对象泄漏 1.3、有时可能需要结合其他方法去排查 1.4、如何保证没有GDI对象泄漏&#xff1f; 2、进程句柄泄漏 2.1、何为进程句柄泄漏&#xff1f; 2.2、创建线程时的线程句柄泄漏 …

Android Studio 是如何和我们的手机共享剪贴板的

背景 近期完成了target33的项目适配升级,随着AGP和gradle的版本升级,万年老版本Android Studio(后文简称AS)也顺便升级到了最新版Android Studio Giraffe | 2022.3.1,除了新UI外,最让我好奇的是这次的Running Devices功能(官方也称为Device mirroring)可以控制真机了. 按照操…

静态住宅代理的优缺点以及使用方法

住宅代理ip分为静态住宅代理和动态住宅代理&#xff0c;住宅代理就是代理ip是真人网络中出发&#xff0c;以代理地址来对目标网站进行访问&#xff0c;具有高匿名度和安全性&#xff0c;在跨境业务中经常使用。而静态住宅代理的特征就是ip地址长时间固定不变&#xff0c;具有唯…

DevEco Studio下载/安装与配置开发环境

一、下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 1.进入DevEco Studio下载官网 单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和Mac…

html2Canvas截图中特殊字体出不来原因

项目中有正常字体和特殊字体,但是导出成图片时特殊字体无法正常显示 下图为导出的截图: 原因: 特殊字体的名称定义 因为之前特殊字体的font-family,是以数字开头,放在html中被转义了,所以一直出不来,前面改成英文后可以正常显示

让丢失成为过去,尽在我们的智能防丢器

我们都知道&#xff0c;生活中总会遇到一些小烦恼&#xff0c;比如钥匙不见了&#xff0c;钱包忘在哪里&#xff0c;甚至手机掉在了不知名的地方&#xff0c;这些看似小事&#xff0c;却足以打乱我们的日程。那么&#xff0c;有没有一种方法&#xff0c;可以让这些烦恼一扫而空…

Ubuntu 2204 搭建 nextcloud 个人网盘

Nextcloud是一套用于创建网络硬盘/云盘以存放文件的客户端-服务器软件&#xff0c;Nextcloud 完全开源并且免费。 一、搭建 ubuntu apache2 mysql php &#xff08;lamp&#xff09;环境 因为 nextcloud 服务是使用 php 语言和 mysql 数据库的web服务&#xff0c;因此需要…

【一周安全资讯1007】多项信息安全国家标准10月1日起实施;GitLab发布紧急安全补丁修复高危漏洞

要闻速览 1.以下信息安全国家标准10月1日起实施 2.GitLab发布紧急安全补丁修复高危漏洞 3.主流显卡全中招&#xff01;GPU.zip侧信道攻击可泄漏敏感数据 4.MOVEit漏洞导致美国900所院校学生信息发生大规模泄露 5.法国太空和国防供应商Exail遭黑客攻击&#xff0c;泄露大量敏感…

Safran与是德科技合作为蔚来提供电动汽车中的5G和C-V2X连接测试

概述 虹科Safran GNSS模拟器助力是德科技&#xff08;Keysight&#xff09;为中国顶级电动汽车制造商之一——蔚来汽车&#xff08;NIO&#xff09;提供了业界领先的UXM 5G测试解决方案以验证5G和C-V2X的连接性&#xff0c;能够根据3GPP和其他标准组织定义的最新5G新无线电&am…

理解ES的refresh、flush、merge

一、refresh 对于任何数据库的写入来讲fsync刷盘虽然保证的数据的安全但是如果每次操作都必须fsync一次&#xff0c;那fsync操作将是一个巨大的操作代价&#xff0c;在衡量对数据安全与操作代价下&#xff0c;ES引入了一个较轻量的操作refresh操作来避免频繁的fsync操作。 1.1…

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

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

九、分枝切割算法

文章目录 1、Gomory切割的算法原理2、分枝切割算法THE END 1、Gomory切割的算法原理 \qquad 考虑有一个等式的形式如下所示&#xff1a; I L F f ILFf ILFf \qquad 其中各项满足以下性质&#xff1a; I L IL IL是一个整数值的表达式 F F F是一个严格正分数的和 f < 1 f&…

SpringBoot项目默认使用HikariDataSource数据库连接池修改使用Druid连接池

1.启动项目&#xff0c;查看正在使用的链接池。 2.在pom.xml文件中引入驱动 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency> 3.在ap…

【广州华锐互动】VR虚拟现实编辑软件的独特优势

随着科技的不断发展&#xff0c;虚拟现实(Virtual Reality&#xff0c;简称VR)技术已经成为了一种新兴的交互方式。由广州华锐互动研发的VR虚拟现实编辑软件&#xff0c;是一种用于创建虚拟现实内容的工具&#xff0c;它可以让用户在虚拟环境中自由地创作和体验各种内容。 VR虚…

JDBC-day01(JDBC概述,获取数据库连接)

一&#xff1a;JDBC概述 1.数据持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多通过各种关系数据库来完成。简单来…