WebGL入门(一)绘制一个点

源码: 

<!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 src="./glMatrix.min.js"></script>
</head>
<body><canvas id="webglCanvas" width="500" height="500"></canvas><script>var webgl // 全局声明webglvar projMat4 // 全局声明投影矩阵var projMat4 = mat4.create() // 创建一个4*4的矩阵var vertexString = `attribute vec4 a_Position;uniform mat4 proj;void main() {gl_Position = proj * a_Position;gl_PointSize = 60.0;}` // 顶点着色器字符串var fragmentString = `precision mediump float;void main() {gl_FragColor = vec4(0, 1.0, 1.0, 1.0);}` // 片元着色器字符串// 入口初始化函数function init(){initWebgl()initShader()// 初始化着色器initBuffer()// 数据缓冲区draw()// 绘制}// webgl初始化function initWebgl(){let webglDiv = document.getElementById('webglCanvas')webgl = webglDiv.getContext('webgl')webgl.viewport(0, 0, webglDiv.clientWidth, webglDiv.height) // 设置视口,四个参数分别是x,y,width,height mat4.ortho(0, webglDiv.clientWidth, webglDiv.clientHeight, 0, -1, 1, projMat4) // 设置正交投影矩阵    }// 初始化着色器,shader初始化函数function initShader(){let vertexShader = webgl.createShader(webgl.VERTEX_SHADER) // 创建顶点着色器let fragmentShader = webgl.createShader(webgl.FRAGMENT_SHADER) // 创建片元着色器webgl.shaderSource(vertexShader, vertexString) // 顶点着色器绑定字符串webgl.shaderSource(fragmentShader, fragmentString) // 片元着色器绑定字符串webgl.compileShader(vertexShader) // 编译顶点着色器webgl.compileShader(fragmentShader) // 编译片元着色器let program = webgl.createProgram() // 创建着色器程序webgl.attachShader(program, vertexShader) // 顶点着色器绑定到着色器程序webgl.attachShader(program, fragmentShader) // 片元着色器绑定到着色器程序webgl.linkProgram(program) // 链接着色器程序webgl.useProgram(program) // 使用着色器程序webgl.program = program // 将着色器程序绑定到webgl上}// 数据缓冲区初始化函数function initBuffer(){let pointPosition = new Float32Array([100.0, 100.0, 0.0, 1.0]) // 创建一个点的位置let aPosition = webgl.getAttribLocation(webgl.program, 'a_Position') // 获取顶点着色器中的a_Position变量let buffer = webgl.createBuffer() // 创建缓冲区对象webgl.bindBuffer(webgl.ARRAY_BUFFER, buffer) // 绑定缓冲区对象webgl.bufferData(webgl.ARRAY_BUFFER, pointPosition, webgl.STATIC_DRAW) // 上传数据到缓冲区webgl.vertexAttribPointer(aPosition, 4, webgl.FLOAT, false, 0, 0) // 将缓冲区数据绑定到a_Positionwebgl.enableVertexAttribArray(aPosition) // 启用顶点属性数组let uniforproj = webgl.getUniformLocation(webgl.program, 'proj') // 获取顶点着色器中的proj变量webgl.uniformMatrix4fv(uniforproj, false, projMat4) // 将投影矩阵传入顶点着色器,三个参数分别是变量,是否转置,矩阵}// 绘制函数function draw(){webgl.clearColor(0.0, 0.0, 0.0, 1.0) // 设置清空颜色webgl.clear(webgl.COLOR_BUFFER_BIT) // 清空颜色缓冲区webgl.drawArrays(webgl.POINTS, 0, 1) // 绘制点,三个参数分别是绘制类型,起始位置,顶点数量}init()</script>
</body>
</html>

绘图效果: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430151.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

高等代数笔记(2)————(弱/强)数学归纳法

数学归纳法的引入情景其实很简单&#xff0c;就是多米诺骨牌。 推倒所有多米诺骨牌的关键就是推倒第一块&#xff0c;以及确保第一块倒下后会带动第二块&#xff0c;第二块带动第三块&#xff0c;以此类推&#xff0c;也就是可以递推。由此我们可以归纳出所有的多米诺骨牌都可…

MySQL学习(索引)

文章目录 基本概念单列索引普通索引&#xff08;index&#xff09;唯一索引&#xff08;unique&#xff09;主键索引 组合索引全文索引&#xff08;fulltext&#xff09;空间索引&#xff08;spatial&#xff09;MySQL存储引擎 基本概念 通过某种算法&#xff0c;构建数据模型&…

LeetCode 2374.边积分最高的节点:模拟

【LetMeFly】2374.边积分最高的节点&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/node-with-highest-edge-score/ 给你一个有向图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff0c;其中每个节点都 恰有一条 出边。 图…

k8s中pod的创建过程和阶段状态

管理k8s集群 kubectl k8s中有两种用户 一种是登录的 一种是/sbin/nologin linux可以用密码登录&#xff0c;也可以用证书登录 k8s只能用证书登录 谁拿到这个证书&#xff0c;谁就可以管理集群 在k8s中&#xff0c;所有节点都被网络组件calico设置了路由和通信 所以pod的ip是可以…

如何使用 maxwell 同步到 redis?

文章目录 1、MaxwellListener2、MxwObject1. 使用Maxwell捕获MySQL变更2. 将Maxwell的输出连接到消息系统3. 从消息系统读取数据并同步到Redis注意事项 1、MaxwellListener package com.atguigu.tingshu.album.listener;import com.alibaba.fastjson.JSON; import org.apache.…

mysql中的json查询

首先来构造数据 查询department里面name等于研发部的数据 查询语句跟普通的sql语句差不多&#xff0c;也就是字段名要用到path表达式 select * from user u where u.department->$.name 研发部 模糊查询 select * from user u where u.department->$.name like %研发%…

Go-知识recover

Go-知识recover 1. 介绍2. 工作机制2.1 recover 定义2.2 工作流程2.3 总结 3. 原理3.1 recover函数的真正逻辑3.2 恢复逻辑3.3 生效条件 4. 总结4.1 recover的返回值是什么&#xff1f;4.2 执行recover之后程序将从哪里继续运行&#xff1f;4.3 recover为什么一定要在defer中使…

无法删除选定的端口,不支持请求【笔记】

场景&#xff1a;在删除打印机端口时&#xff0c;提示&#xff1a;“无法删除选定的端口&#xff0c;不支持请求”&#xff0c;如下图所示。 以下以删除USB036端口为示例&#xff0c;操作步骤如下&#xff1a; 在注册表编辑器中&#xff0c;从以下注册表项中“计算机\HKEY_LO…

Spring中存储Bean的常见注解

目录 IoC & DI IOC&#xff08;控制反转&#xff09;详解 依赖注入的三种方式 IoC & DI IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 控制反转&#xff1a;也就是控制权反转. 什么的控制权发⽣了反转? 获得依赖对…

Python增强办公效率的11个实用代码段

如果你正在学习Python&#xff0c;那么你需要的话可以&#xff0c;点击这里&#x1f449;Python重磅福利&#xff1a;入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享&#xff01; 引言 在日常工作中&#xff0c;许多任务可以通过编程自动化来提高效率。本…

算法入门-贪心2

第八部分&#xff1a;贪心 561.数组拆分&#xff08;简单&#xff09; 题目&#xff1a;给定长度为 2n 的整数数组 nums &#xff0c;你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) &#xff0c;使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最…

Three.js 3D人物漫游项目(下)

本文目录 前言最终效果1、效果回顾2、编写人物模型动画执行类并调用2.1 代码2.2 代码解读2.3 实例化动画类并调用2.4 效果2.4.1 休息动画2.4.2 跑步动画2.4.3 走路动画2.4.4 舞蹈1动画2.4.5 舞蹈2动画3、键盘控制动画3.1 站立休息、走、跑、舞蹈1、舞蹈2代码3.1.1 效果3.2 跳跃…

基于丹摩智算平台-手把手拿下经典目标检测模型 Faster-Rcnn

文章目录 1. 前言1. 1 丹摩智算平台1.2 经典目标检测模型 Faster-Rcnn 2. 前置准备2.1 WindTerm&#xff08;远程连接服务器&#xff09;2.2 项目源码 3. 服务器平台配置3.1 创建实例3.2 远程链接 4. Faster-rcnn 的环境配置4.1 上传文件&#xff0c;解压4.2 安装所需环境 5. 数…

华为HarmonyOS地图服务 1 -- 如何实现地图呈现?

如何使用地图组件MapComponent和MapComponentController呈现地图&#xff0c;效果如下图所示。 MapComponent是地图组件&#xff0c;用于在您的页面中放置地图。MapComponentController是地图组件的主要功能入口类&#xff0c;用来操作地图&#xff0c;与地图有关的所有方法从此…

基于PaddlePaddle复现的PeleeNet

转自AI Studio&#xff0c;原文链接&#xff1a;基于PaddlePaddle复现的PeleeNet - 飞桨AI Studio PeleeNet: An efficient DenseNet architecture for mobile devices 1. 简介 这是一个PaddlePaddle实现的PeleeNet。 PeleeNet是一个高效的卷积神经网络&#xff08;CNN&…

数通。。。

通信&#xff1a;需要介质才能通信电话离信号塔&#xff08;基站&#xff09;越远&#xff0c;信号越弱。信号在基站之间传递。你离路由器越远&#xff0c;信号越差。一个意思 比如想传一张图片&#xff0c;这张图片就是数据载荷 网关&#xff0c;分割两个网络。路由器可以是网…

【贪心算法】贪心算法二

贪心算法二 1.最长递增子序列2.递增的三元子序列3.最长连续递增序列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列 题目链…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考&#xff1a;https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似&#xff0c;右侧展示效果和代码 https://pagen.so/

用uniapp 及socket.io做一个简单聊天 升级 9

比这之前优化了以下功能 上线通知 群聊里适时显示在线人数 约请好友 通过好友通过socket 相应端自动变化 PC端可以拉取摄象头拍照 PC端可以录音发送 拉起摄象头发送录象 <template><view class""><scroll-view scroll-y"true" class&…