webGL入门(六)图形旋转

ops/2024/10/18 10:21:12/

效果:

代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>var webgl// shader参数var vsString = `attribute vec3 a_position;uniform float angle;void main(){gl_Position = vec4(a_position.x*cos(angle)-a_position.y*sin(angle),a_position.x*sin(angle)+a_position.y*cos(angle),0,1.0);}` // 顶点着色器字符串var fsString = `void main(){gl_FragColor = vec4(1.0,0.0,0.0,1.0);}` // 片元着色器字符串function init(){initWebgl()initShader()initBuffer()draw()}function initWebgl(){let webglDiv = document.getElementById('webgl_canvas')webgl = webglDiv.getContext("webgl")webgl.viewport(0,0,webglDiv.clientWidth,webglDiv.clientHeight)}function initShader(){// 创建shaderlet shaderVS = webgl.createShader(webgl.VERTEX_SHADER)let shaderFS = webgl.createShader(webgl.FRAGMENT_SHADER)// 绑定shader字符串webgl.shaderSource(shaderVS,vsString)webgl.shaderSource(shaderFS,fsString)// 编译shaderwebgl.compileShader(shaderVS)webgl.compileShader(shaderFS)// 判断shader是否编译成功let program = webgl.createProgram()webgl.attachShader(program,shaderVS)webgl.attachShader(program,shaderFS)// 链接programwebgl.linkProgram(program)webgl.useProgram(program)webgl.program = program}function initBuffer(){let arr = [0.1,0.4,0.0,0.1,0.5,0.0,0.2,0.4,0.0,]let float = new Float32Array(arr)let buffer = webgl.createBuffer()webgl.bindBuffer(webgl.ARRAY_BUFFER,buffer)webgl.bufferData(webgl.ARRAY_BUFFER,float,webgl.STATIC_DRAW)let aPosition = webgl.getAttribLocation(webgl.program,"a_position")webgl.vertexAttribPointer(aPosition,3,webgl.FLOAT,false,0,0)webgl.enableVertexAttribArray(aPosition)let uAngle = webgl.getUniformLocation(webgl.program,"angle")let angle1 = 90 * Math.PI / 180webgl.uniform1f(uAngle,angle1)}function draw(){webgl.clearColor(0.0,1.0,1.0,1.0)webgl.clear(webgl.COLOR_BUFFER_BIT)webgl.drawArrays(webgl.TRIANGLES,0,3)}</script>
</head>
<body onload="init()"><canvas id="webgl_canvas" width="500" height="500"></canvas>
</body>
</html>

复盘总结:


http://www.ppmy.cn/ops/122464.html

相关文章

oracle解决关联查询报invalid number问题

出现问题的原因和背景 oracle进行关联查询的时候因为字段存在多个用逗号切割的id&#xff0c;导致查询的过程中报无效数字或非法数字 问题复现 新建表A CREATE TABLE "A" (id NUMBER NOT NULL,name VARCHAR2(255 BYTE) )INSERT INTO "A" VALUES (1, 上海…

CGLib动态代理和JDK动态代理Demo、ASM技术尝鲜

本文主要介绍CGLib和JDK动态代理的使用&#xff0c;不对源码进行深入分析。代码可直接复制使用。 类型 机制 回调方式 适用场景 效率 JDK动态代理 委托机制。代理类和目标类都实现了同样的接口。InvocationHandler持有目标类。代理类委托InvocationHandler去调用目标类原…

VGG16模型实现MNIST图像分类

MNIST图像数据集 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;是一个经典的机器学习数据集&#xff0c;常用于训练和测试图像处理和机器学习算法&#xff0c;特别是在数字识别领域。该数据集包含了大约 7 万张手写数字图片&#xf…

k8s搭建双主的mysql8集群---无坑

《k8s搭建一主三从的mysql8集群---无坑-CSDN博客》通过搭建一主三从&#xff0c;我们能理解到主节点只有1个&#xff0c;那么承担增删改主要还是主节点&#xff0c;如果你在从节点上去操作增删改操作&#xff0c;数据不会同步到其他节点。本章我们将实现多主&#xff08;双主&a…

【艾思科蓝】Vue.js组件开发实战:从零构建高效可复用组件

【IEEE出版 | 会后3-4个月EI检索】第三届云计算、大数据应用与软件工程国际学术会议 (CBASE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 一、Vue.js 组件开发基础 二、构建高效可…

一个简单的将产品图册转换为翻页电子产品图册的方法

​在数字化浪潮席卷全球的今天&#xff0c;企业纷纷寻求转型&#xff0c;纸质产品图册逐渐被翻页电子图册所替代。电子图册不仅具有环保、便捷、易于更新等优势&#xff0c;还能为企业节省大量印刷和物流成本。那么&#xff0c;如何将现有的实体产品图册转化为翻页电子图册呢 1…

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…

cmake如何在编译时区分-std=c++17和-std=gnu++17?检查宏

如何在编译时区分-stdc17和-stdgnu17&#xff1f;检查宏&#xff1f;-腾讯云开发者社区-腾讯云 我正在使用__int128扩展的g。-stdc17的问题是&#xff0c;一些C库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-stdgnu17时&#xff0c;它工作得很好。 我…