我在B站录制视频啦——RayCaster原理实现

简介: 前言之前做了一期关于B站的视频,反响效果还不错。感谢各位小伙伴的支持,但是我是个追求原理的工程师, three.js 射线检测到底是怎么去实现的,我🤔还是决定用简短的时间,带大家回顾下。到底是怎么实现的,本篇文章阅读大概5分钟你就能掌握。图片B站🔍喜欢图形的Fly背景如何知道鼠标所在位置是否存在图形,转换问题角度来看可以看做从鼠标所处位置发出一根射线,这根射线是否与三角形相交,换而言之即为「鼠标所在位置在一个三角形内是否存在投影的一点?」图片投影图思路解析根据上述描述可知,我们的真实需求是需要判断鼠标所在位置是否在三角形内,这里我们介绍一个最快的方法,我们可以以鼠标

前言



之前做了一期关于B站的视频,反响效果还不错。感谢各位小伙伴的支持,但是我是个追求原理的工程师, three.js 射线检测到底是怎么去实现的,我🤔还是决定用简短的时间,带大家回顾下。到底是怎么实现的,本篇文章阅读大概5分钟你就能掌握。




背景



如何知道鼠标所在位置是否存在图形,转换问题角度来看可以看做从鼠标所处位置发出一根射线,这根射线是否与三角形相交,换而言之即为「鼠标所在位置在一个三角形内是否存在投影的一点?」


image.png


投影图


思路解析



根据上述描述可知,我们的真实需求是需要判断鼠标所在位置是否在三角形内,这里我们介绍一个最快的方法,我们可以以鼠标所在点为origin,三角形a,b,c三点作为条件


步骤1


(设置前置变量,计算点origin到三角形顶点向量与三条边的向量):


image.png


image-20210811210122868


步骤2


(计算点到边与边的叉积):


image.png


image-20210811210157500


步骤3


(判断3个叉积值是否同向):若 P1,P2,P3P_1,P_2,P_3P1,P2,P3 的正负号一致,则说明射线与三角形相交


解释说明



向量的叉乘可判断向量方向,以 P1P_1P1 这个结果为例,若为0说明共线,若小于0垂直向内,若大于0说明垂直向外,一个点是否在三角形内部可以分别计算三个叉乘结果,如果在三角形内部则必定说明三个方向一定正负同号,异号则表示点在某条边的另外一侧


其他方法



  1. 判断某一点在三角形还有「重心坐标表示法」,该种解法是构造以鼠标为起点发出的射线,方向为正的参数方程,如果射线与三角形相交,则说明三角形内必有一点为三角形与射线的交点,需要联立射线参数方程与三角形重心坐标参数方程做等式求解,此处不另外展开说明


  1. 通常在求解鼠标所在位置是否存在图形时,不会采用直接求解射线与三角形是否相交的解法,因为一个复杂的几何表示可能有几千上万个三角形面片,计算量太大影响性能,通常会「采用包围盒计算方法」,虽然存在一定误差,但是能够大量的减少计算,性能十分可观


相关文章
|
5月前
|
Web App开发 编解码 资源调度
在阿里云直播解决方案中,当使用ARTC协议观看直播并进行清晰度切换时出现画面卡顿或马赛克现象,可能存在以下几种原因
【6月更文挑战第30天】阿里云直播中,ARTC协议下清晰度切换出现卡顿或马赛克可能由网络带宽、缓冲策略、转码效率、播放器解码、协议特点及服务器资源调度引起。解决措施包括优化网络、智能切换算法、播放器与服务器优化。通过监控和日志分析定位问题,参照官方最佳实践进行优化。
226 1
|
27天前
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
100 1
|
1月前
|
Web App开发 缓存 前端开发
拿下奇怪的前端报错(六):多摄手机webrtc拉取视频流会导致应用崩溃,从而无法进行人像扫描
本文介绍了一种解决手机摄像头切换导致应用崩溃的问题的方法。针对不支持facingMode配置的四摄手机,通过缓存和序号切换的方式,确保应用在特定设备上不会频繁崩溃,提升用户体验。
|
XML 存储 编解码
浅浅地优化下视频流播放体验
浅浅地优化下视频流播放体验
614 0
|
Web App开发 JSON JavaScript
插件制作实战(B站视频评论屏蔽)
插件制作实战(B站视频评论屏蔽)
123 0
|
容器
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
691 0
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
|
内存技术
在线版!音乐伴奏提取、变调、调速、查调性……太强大了!
由于Spleeter是要下载到电脑上运行的,由于电脑系统版本、电脑上的运行库等多方面原因,很多用户私信我说软件运行不了。
681 0
|
开发工具
语音聊天室源码技术美颜滤镜功能的配置
美颜滤镜功能从现身以来一直受到人们的火爆追捧,所以为了顺应市场的需求,开发语音聊天室源码平台也必须要有美颜滤镜功能,今天我就将语音聊天室源码技术美颜滤镜功能的配置知识分享给大家。
语音聊天室源码技术美颜滤镜功能的配置
|
缓存 Java 索引
浅浅地优化下视频流播放体验(下)
浅浅地优化下视频流播放体验
341 0
|
JavaScript 前端开发
【Axure教程】调用b站视频播放器
【Axure教程】调用b站视频播放器
【Axure教程】调用b站视频播放器
下一篇
无影云桌面