WebGL 3D基础
1. 归一化函数
对一个向量进行归一化处理,即调整向量的模长(长度)为1,同时保持其方向不变。
// 归一化函数
function normalized(arr) {let sum = 0;for (let i = 0; i < arr.length; i++) {sum += arr[i] * arr[i];}const middle = Math.sqrt(sum);for (let i = 0; i < arr.length; i++) {arr[i] = arr[i] / middle;}
}const vector = [3, 4]; // 原始向量
normalized(vector);
console.log(vector); // 输出:[0.6, 0.8],归一化后的向量
2. 叉积
叉积常被用来计算求两个平面的法向量,这个结果向量通常用于确定法线(normal)方向,比如在计算光照效果时。
// 叉积函数,获取法向量,固定写法
function cross(a, b) {return new Float32Array([a[1] * b[2] - a[2] * b[1], //这是叉积结果向量的x分量。a[2] * b[0] - a[0] * b[2], //这是叉积结果向量的y分量。a[0] * b[1] - a[1] * b[0], //这是叉积结果向量的z分量。])
}const a = [1, 2, 3];
const b = [4, 5, 6];
console.log(cross(a, b)); // 结果为[-3, 6, -3]
3. 点积
求某点在x,y,z轴上的投影长度
// 点积函数 获取投影长度
function dot(a, b) {return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
}const a = [1, 2, 3];
const b = [4, 5, 6];
console.log(dot(a, b)); // 结果为32
4. 向量差
向量差用来获取视点到目标点之间的向量。
// 向量差
function minus(a, b) {return new Float32Array([a[0] - b[0],a[1] - b[1],a[2] - b[2],])
}const a = [1.0, 2.0, 3.0]
const b = [4.0, 5.0, 6.0]
console.log(minus(a, b)) // 结果为[-3.0, -3.0, -3.0]
5. 视图矩阵
基于给定点的视点、注视点和上方向向量来确定视图的方向,并生成相应的矩阵。
// 视图矩阵获取
function getViewMatrix(eyex, eyey, eyez, lookAtx, lookAty, lookAtz, upx, upy, upz) {// 视点const eye = new Float32Array([eyex, eyey, eyez])// 目标点const lookAt = new Float32Array([lookAtx, lookAty, lookAtz])// 上方向const up = new Float32Array([upx, upy, upz])// 确定z轴const z = minus(eye, lookAt)// 确定x轴normalized(z)normalized(up)const x = cross(z, up)// 确定y轴normalized(x)const y = cross(x, z)return new Float32Array([x[0], y[0], z[0], 0,x[1], y[1], z[1], 0,x[2], y[2], z[2], 0,-dot(x, eye), -dot(y, eye), -dot(z, eye), 1])
}
6. 正射投影矩阵
// 获取正射投影矩阵
function getOrtho(l, r, t, b, n, f) {return new Float32Array([2 / (r - l), 0, 0, 0,0, 2 / (t - b), 0, 0,0, 0, -2 / (f - n), 0,-(r + l) / (r - l), -(t + b) / (t - b), -(f + n) / (f - n), 1,])
}
7. 透视投影矩阵
// 获取透视投影矩阵
function getPerspective(fov, aspect, far, near) { //视角,宽高比,远,近fov = fov * Math.PI / 180;return new Float32Array([1 / (aspect * Math.tan(fov / 2)), 0, 0, 0,0, 1 / (Math.tan(fov / 2)), 0, 0,0, 0, -(far + near) / (far - near), -(2 * far * near) / (far - near),0, 0, -1, 0,])
}
相关文章:
WebGL 3D基础
1. 归一化函数 对一个向量进行归一化处理,即调整向量的模长(长度)为1,同时保持其方向不变。 // 归一化函数 function normalized(arr) {let sum 0;for (let i 0; i < arr.length; i) {sum arr[i] * arr[i];}const middle …...
Docker 部署MongoDb
1. 编写docker-compose.conf 文件 version: 3 services:mongo:image: mongo:latest # 指定 MongoDB 版本,确保 > 3.6container_name: mongo-replicarestart: alwayscommand: ["mongod", "--replSet", "rs0", "--oplogSize&…...
【Hadoop】hadoop的路径分不清?HDFS路径与本地文件系统路径的区别
/usr/local/hadoop /user/hadoop /home/hadoop/ 这里有些路径名很相似,帮我区分? 在Hadoop生态系统中,理解文件存储的位置对于有效管理数据至关重要。Hadoop分布式文件系统(HDFS)提供了一个高度可靠的存储系统…...
倪师学习笔记-天纪-易经八卦
一、简介 卦代表事情,爻代表时机,三爻为一卦八卦对应的天相,六十四卦对应人间事 二、八卦性 1、乾 天父亲向下看,无所求,雄心万丈始终如一,贞,坚心,专心至刚,天威&am…...
自动驾驶性能分析时,非常有用的两个信息
自动驾驶的关键路径如下,传感器的数据发送给感知模块;感知模块根据传感器数据来确定车辆所处的环境,比如前方有没有障碍物,是不是和车道线保持着适当的距离等;感知处理之后的数据传递给规控模块,规控根据车…...
数据结构 - 并查集
文章目录 一、并查集原理二、并查集实现三、并查集的应用 一、并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复…...
canvas基础+应用+实例
文章目录 Canvas基础知识要点一、基本概念二、常用参数三、实例四、场景应用说明完结 Canvas基础知识要点 一、基本概念 Canvas是HTML5中的一个标签,用于在网页上通过JavaScript绘制图形、动画等。它提供了一个空白的、基于像素的绘图区域,就像一块画布…...
Linux命令 用户操作简介
目录 1. 添加新的用户账号 2. 删除用户账号 3. 修改用户账号 4. 用户口令的管理 示例汇总 添加新用户 删除用户 修改用户信息 更改用户口令 在 Linux 系统中,用户管理是一项重要的任务,包括添加新用户、删除用户、修改用户信息以及管理用户口令…...
大语言模型的Scaling Law【Power Low】
NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 文章目录 NLP-大语言模型学习系列目录一、什么是…...
windows环境下,使用docker搭建redis集群
参考: https://blog.csdn.net/weixin_46594796/article/details/137864842 https://www.cnblogs.com/niceyoo/p/14118146.html 史上最详细Docker搭建Redis Cluster集群环境 值得收藏 每步都有图,不用担心学不会-腾讯云开发者社区-腾讯云 一、基础环境描述 宿主机:192.168…...
Python(pandas库3)
函数 随机抽样 语法: n:要抽取的行数 frac:抽取的比例,比如 frac0.5,代表抽取总体数据的50% axis:示在哪个方向上抽取数据(axis1 表示列/axis0 表示行) 案例: 输出结果都为随机抽取。 空…...
WPF+MVVM案例实战(十)- 水波纹按钮实现与控件封装
文章目录 1、运行效果1、封装用户控件1、创建文件2、依赖属性实现2、使用封装的按钮控件1.主界面引用2.按钮属性设置3 总结1、运行效果 1、封装用户控件 1、创建文件 打开 Wpf_Examples 项目,在 UserControlLib 用户控件库中创建按钮文件 WaterRipplesButton.xaml ,修改 Us…...
数据结构————map,set详解
今天带来map和set的详解,保证大家分清楚 一,概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型,我们称之为<key-value>模型 set只能存储一个数据类型,我们称之为纯<key>模型 它们的效率都非…...
fdisk - Linux下的磁盘分区利器
文章目录 前言一、安装和启动二、基本命令2.1 查看分区表2.2 删除分区2.3 创建新分区2.4 更改分区类型2.5 其他指令 三、注意事项四、其他相关工具 前言 在Linux系统中,磁盘管理是维护系统性能和数据安全的重要环节。fdisk 是一个强大的命令行工具,专门…...
or-tools优化库记录
介绍 Or-tools是谷歌人工智能系列的运筹优化包,是一个用于优化的开源软件套件,针对性地解决车辆路线问题、流程优化、整数和线性规划以及约束规划等问题。 官网地使用说明比我详细,我就不多逼逼了 使用说明网址: https://develo…...
M1 Pro MacBook Pro 上的奇遇:Rust 构建失败,SIGKILL 惊魂记
你是否也曾在 M1 Pro MacBook Pro 上遇到过离奇的编译问题?这次我遇到的奇葩问题绝对值得一聊——一个仅在苹果M1 Pro上的神秘构建失败。其他设备都安然无恙,唯独它!折腾了一番,终于让我揭开了这“阴谋”的真相。 问题描述 在运…...
重构商业生态:DApp创新玩法与盈利模式的深度剖析
随着区块链技术的发展,DApp(去中心化应用)正在从实验走向成熟。DApp以去中心化、透明性和不可篡改性为基础,结合智能合约,逐步改变传统商业运作模式,创造新的市场生态。本文将从DApp的独特优势、创新玩法和…...
2024首届亚洲国际电影节圆满落下帷幕
10月26日下午,2024首届亚洲国际电影节颁奖典礼在中国•澳门隆重举行。在这座充满时尚感的“东亚文化之都”,一座座金鹮奖杯,汇聚起全球电影艺术的荣耀之光,见证着无数电影梦想的傲然绽放。明星云集欢聚一堂,同庆澳门回…...
【Mybatis】动态SQL+配置文件+数据库连接池+企业规范(10)
本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 目录 本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点,根据序号学习即可。 …...
layui扩展组件之----右键菜单
源码:rightmenu.js layui.define([element], function (exports) {let element layui.element;const $ layui.jquery;let MOD_NAME rightmenu;let RIGHTMENUMOD function () {this.v 1.0.0;this.author raowenjing;};String.prototype.format function () {…...
RO-ViT:区域感知预训练如何革新开放词汇目标检测
1. 项目概述:从“闭门造车”到“开箱即用”的视觉检测新范式在计算机视觉领域,目标检测一直是个硬骨头。传统的检测模型,比如我们熟悉的Faster R-CNN、YOLO系列,都遵循一个“闭集”范式:模型在训练时见过多少类物体&am…...
从仿真到PCB:基于74LS系列芯片的十字路口交通灯系统实战设计
1. 项目背景与设计目标 十字路口交通灯控制系统是数字电路课程的经典实践项目。记得我第一次接触这个课题时,既兴奋又忐忑——兴奋的是终于能把课本上的与非门、触发器应用到真实场景,忐忑的是从仿真到实物可能存在的各种"坑"。这个基于74LS系…...
终极指南:Flair如何引领NLP技术未来发展趋势
终极指南:Flair如何引领NLP技术未来发展趋势 【免费下载链接】flair A very simple framework for state-of-the-art Natural Language Processing (NLP) 项目地址: https://gitcode.com/gh_mirrors/fl/flair Flair是一个由柏林洪堡大学开发的简单而强大的自…...
基于MCP的AI智能体:用自然语言轻松管理TikTok广告投放
1. 项目概述:用AI智能体玩转TikTok广告投放 如果你正在做跨境电商、品牌出海,或者任何面向年轻消费者的生意,TikTok广告绝对是你绕不开的战场。但真正上手后,你会发现事情没那么简单:TikTok的广告后台(Ads…...
解锁B站宝藏:一款让你轻松下载无水印高清视频的神器
解锁B站宝藏:一款让你轻松下载无水印高清视频的神器 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 你是否经常在B站发现精彩视频,却苦于无法保存到本地?是否因为右上角的…...
Andorid下给PDF盖骑缝章的方法—安卓手机批量盖骑缝章的方法
Andorid下给PDF盖骑缝章的方法,安卓手机批量盖骑缝章的方法。一、准备印章图片1。不需要制作为透明的印章,用白底Png格式图片即可,白底图片盖章时软件会自动透明并融合。2。印章边线与图片四边不要有空隙,如下:错误的&…...
从玩具到生产:基于run-llama/rags构建模块化RAG系统的工程实践
1. 项目概述:从“玩具”到“生产力”的RAG系统构建如果你最近在关注大语言模型的应用落地,那么“RAG”这个词一定高频出现在你的视野里。RAG,即检索增强生成,它试图解决大模型“一本正经胡说八道”和“知识陈旧”两大核心痛点。简…...
Tarjan算法:从DFS序到强连通分量的寻路指南(附C++实战与缩点技巧)
1. 从迷宫探索到强连通王国:Tarjan算法的生活隐喻 想象你正在探索一座巨大的迷宫,手里拿着粉笔和记事本。每走到一个新的岔路口,你就在墙上标记数字(第一个到的路口标1,第二个标2...),这就是DFS…...
坐北朝南教育集团
在教育行业不断发展的当下,家长和学生在选择教育机构时常常面临诸多困扰,寻找一家口碑好、教学质量高的教育集团成为了关键。坐北朝南教育集团作为辽沈地区知名的综合教育航母,在解决教育领域痛点方面表现出色,成为众多家长和学生…...
ARM架构VDISR_EL3寄存器解析与虚拟中断处理
1. ARM架构中的VDISR_EL3寄存器深度解析在ARMv8/v9架构的异常处理子系统中,VDISR_EL3(Virtual Deferred Interrupt Status Register)是一个关键的系统寄存器,它属于ARM可靠性、可用性和可维护性(RAS)扩展的…...
