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


相关文章
|
6月前
|
Web App开发 编解码 资源调度
在阿里云直播解决方案中,当使用ARTC协议观看直播并进行清晰度切换时出现画面卡顿或马赛克现象,可能存在以下几种原因
【6月更文挑战第30天】阿里云直播中,ARTC协议下清晰度切换出现卡顿或马赛克可能由网络带宽、缓冲策略、转码效率、播放器解码、协议特点及服务器资源调度引起。解决措施包括优化网络、智能切换算法、播放器与服务器优化。通过监控和日志分析定位问题,参照官方最佳实践进行优化。
247 1
|
7月前
|
Linux C++ iOS开发
VLC源码解析:视频播放速度控制背后的技术
VLC源码解析:视频播放速度控制背后的技术
640 0
|
XML 存储 编解码
浅浅地优化下视频流播放体验
浅浅地优化下视频流播放体验
642 0
|
开发工具
语音聊天室源码技术美颜滤镜功能的配置
美颜滤镜功能从现身以来一直受到人们的火爆追捧,所以为了顺应市场的需求,开发语音聊天室源码平台也必须要有美颜滤镜功能,今天我就将语音聊天室源码技术美颜滤镜功能的配置知识分享给大家。
语音聊天室源码技术美颜滤镜功能的配置
|
缓存 Java 索引
浅浅地优化下视频流播放体验(下)
浅浅地优化下视频流播放体验
363 0
|
JavaScript 前端开发
【Axure教程】调用b站视频播放器
【Axure教程】调用b站视频播放器
【Axure教程】调用b站视频播放器
|
Web App开发 编解码 缓存
猿大师播放器在谷歌chrome播放多路海康威视RTSP视频流,修改过缓存后仍然卡顿怎么办?
在用猿大师播放器同时播放多路海康威视的RTSP视频流,2K和4K视频有卡顿情况,修改完缓存和网络配置后仍然卡顿怎么处理?
336 0
猿大师播放器在谷歌chrome播放多路海康威视RTSP视频流,修改过缓存后仍然卡顿怎么办?
|
安全 JavaScript 前端开发
如何让在线视频以自定义速度播放
现在看视频不来个两倍速(或者更快)都觉得在浪费生命。 特别是在看视频教程的时候,文字我们可以做到一目十行,但是视频呢,如果有字幕,我们甚至不用听清,用3倍速或者4倍速完全没有问题,尤其在看别人在线写代码的时候,速度快了,就觉得特别顺滑。
535 0
如何让在线视频以自定义速度播放
|
Web App开发 编解码 中间件
海康威视摄像头RTSP视频流嵌入到谷歌Chrome等WEB页面中实时播放方案(图文教程)
近期在做一个智慧城市项目,要求将海康威视、大华等摄像头RTSP视频流在Chrome、Firefox、Edge等浏览器中播放,并且要求延迟必须要低,能到多低就多低,最好是实时视频。 小编了解很多不同的方案,目前市面上大部分是转码转流方案,不仅需要服务器支持,并且需要服务器不停的转码转流,如果多路同时播放或者播放高清视频,非常容易出现卡顿、花屏等情况,延迟更是高达数秒甚至数分钟,对于一些延迟要求较高的项目来说,这简直是灾难性后果。
2937 0
海康威视摄像头RTSP视频流嵌入到谷歌Chrome等WEB页面中实时播放方案(图文教程)