使用三点系统计算模型中的压痕深度?

2024-03-15

通过光线投射,我们可以选择游戏对象碰撞器上的一个点。在简短的视觉效果中,三个点用小球体表示,表示用户选择。我们的愿望是计算模型压痕中任何点的深度。当前的想法是使用一种系统,其中用户选择压痕深度之外的两个点和压痕深度内的一个点来计算压痕深度。

我们可以获得的信息是空间中的三个点(向量)、它们之间的距离以及任何其他利用三个点的向量数学。我们如何使用上述数据来计算压痕的深度?计算垂直于深度点的点是否可行且合理?想法是,如果这个点是可计算的,那么深度就是这两点之间的距离。如何解决这个问题,是否可行,是否有更好的方法?


这是一个相当悬而未决的问题,因为简单的“深度”是相当模糊的。如果您可以在世界空间中的模型上找到一些点,则有两种方法:

方法 1:从曲面上的 3 个点创建参考平面。

  1. 让用户单击他们想了解其“深度”的点。

    RaycastHit indentHit;
    Vector3 depthPoint = indentHit.point;
    
  2. 让用户单击“缩进”之外的三个点。这三个点定义了一个平面,我们将用它作为“深度”测量的参考。

    RaycastHit hitA;
    RaycastHit hitB;
    RaycastHit hitC;
    
    Vector3 a = hitA.point;
    Vector3 b = hitB.point;
    Vector3 c = hitC.point; 
    
    Plane surfacePlane = new Plane(a, b, c); 
    
  3. 使用以下公式求出该点到平面的距离Plane.GetDistanceToPoint。我们不关心方向,只关心距离,所以我们使用Mathf.Abs确保我们的距离为正:

    float depth = Mathf.Abs(surfacePlane.GetDistanceToPoint(depthPoint));
    

方法 2:从曲面上的 1 点及其法线创建参考平面。

另一种方法是在模型表面上取一个点,在凹口上取一个点,然后从模型表面上的单个点创建一个平面,并使用其法线从该点创建一个平面观点:

  1. 让用户单击他们想了解其“深度”的点。

    RaycastHit indentHit;
    Vector3 depthPoint = indentHit.point;
    
  2. 让用户单击“缩进”之外的一点。然后,找到该点的法线。由此,您可以生成一个平面。

    RaycastHit surfaceHit;
    Vector3 surfacePoint = surfaceHit.point;
    Vector3 surfaceNormal = surfaceHit.normal;
    
    Plane surfacePlane = new Plane(surfaceNormal.normalized, surfacePoint);
    

    可能值得尝试的事情是允许采用多个点和法线并对它们进行平均以创建平面。如果您尝试此操作,请确保您获得normalized正常的形式。

  3. 使用以下公式求出该点到平面的距离Plane.GetDistanceToPoint。我们不关心方向,只关心距离,所以我们使用Mathf.Abs确保我们的距离为正:

    float depth = Mathf.Abs(surfacePlane.GetDistanceToPoint(depthPoint));
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用三点系统计算模型中的压痕深度? 的相关文章

随机推荐

  • 具有可选+可变参数的 Node.js 命令

    请帮我获取节点的commander按照我想要的方式解析参数的模块 我正在寻找将文件列表上传到指定数据库 有一个默认的数据库名称 因此用户不应该need包含数据库参数 我希望这个命令按如下方式工作 gt gt gt upload js db
  • 如何在没有自定义代码的情况下从命令行通过 Scons 传递任意编译器 CFLAGS?

    有没有办法写这样的东西 scons CFLAGS fsanitize address fsanitize thread 这只适用于最小的脚本 env Environment env Program target main out sourc
  • `initialize':没有这样的文件或目录 - 当 Rails 新应用程序时 getaddrinfo (Errno::ENOENT)

    我尝试使用 ruby ruby 2 0 0 p247 在 Rails 4 00 中创建一个 Rails 应用程序 当捆绑安装过程中 它显示一个错误 initialize No such file or directory 以下是错误的输出
  • 尽管通道已准备就绪,Java NIO 选择器 select() 返回 0

    我的 Java NIO 选择器是使用实现的select http docs oracle com javase 6 docs api java nio channels Selector html select 28 29所以它会阻塞 直到
  • React:有类似node.textContent的东西吗?

    我正在尝试测试一个反应组件子级 我想获得其子级的文本表示 有没有一个工具可以做类似的事情node textContent对于反应 我想要这样的东西 let testComponent
  • 通过 VSTO 在 PowerPoint 设计器中捕获鼠标事件

    我正在使用 C VSTO 开发 PowerPoint 2013 插件 当用户处于设计模式 而不是演示模式 如何捕获与幻灯片上的形状 对象有关的鼠标事件 例如鼠标悬停 鼠标按下等 我想监听这些事件 以便创建位于对象 形状附近的自定义 UI 是
  • USB 调试 - 安装 Epson Moverio 驱动程序时出现问题

    Android 开发新手 我使用以下命令制作了一个小应用程序Eclipse http en wikipedia org wiki Eclipse 28software 29在虚拟 Android 设备上完美运行 现在 我想在真实的设备上运行
  • 如何使用 jQuery 或其他 js 框架将字符串作为文件上传

    使用javascript 我有一个字符串文件 通过ajax请求获得 如何通过另一个ajax请求将其作为文件上传到服务器 以下是无需手动构建多部分请求正文的方法 var s some string data var filename foob
  • 将 dd/mm/yyyy 转换为 SQL Server 中的日期

    我正在疯狂地尝试将字符串类型列转换为日期 列名称是StartDate 其中包含字符串日期格式dd mm yyyy 字段类型是varchar 3000 我尝试了以下方法 CONVERT datetime StartDate 103 CAST
  • Perl 中的非阻塞/异步执行

    有没有办法实现非阻塞 异步执行 无需fork http perldoc perl org functions fork html ing 在 Perl 中 我曾经是一名 Python 开发人员很多年了 Python 有非常出色的 Twist
  • Vagrant 端口转发在 Mavericks 上不起作用

    我正在使用一个流浪的 Geodjango 盒子 https github com david wilson vagrant geodjango base并且端口转发对我不起作用 在盒子上 我运行了 python manage py runs
  • 运行时更改进度对话框消息

    我有一个相当简单的问题 我不知道如何解决 我想在进度对话框运行和显示时更改其消息文本 一个例子是 剩余时间 计数器 它会在进度动画旋转时进行倒计时 我不确定如何解决这个问题 因为即使在正在运行的线程中执行progressDialog set
  • 如何在 C# 中将名字和姓氏的首字母大写?

    有没有一种简单的方法可以将字符串的第一个字母大写并降低其余字母 有内置方法还是我需要自己制作 TextInfo ToTitleCase 将字符串的每个标记中的第一个字符大写 如果不需要维护 Acronym Uppercasing 那么您应该
  • php mysql jquery AJAX 自动完成区分大小写

    在我的 php 脚本中 names GET part result mysql query SELECT FROM namestable where names LIKE names LIMIT 10 while row mysql fet
  • CSS 将元素保持在屏幕上的“固定”位置

    我正在寻找一种使用 CSS 在浏览器屏幕上创建 固定 HTML 对象的技巧 我希望它始终保持在同一位置 即使用户滚动文档时也是如此 我不确定这个的正确术语是什么 它就像 Facebook 上的聊天按钮或某些网站上的反馈按钮 在整个页面中跟随
  • 方法封装的性能成本

    封装方法有性能成本吗 一个非常简短 随意的例子 public static decimal Floor decimal value return Math Floor value 上面的函数会被内联吗 如果是这样 它是否与从代码中调用 Ma
  • 如何在类方法 Objective C 中访问 self

    我有一个使用类方法的实用程序类 我试图在类方法中引用 self 但不能 我想知道如何在类方法中声明以下内容 MRProgressOverlayView showOverlayAddedTo self window animated YES
  • UITableView tableFooterView 显示在 UITableView 的顶部 - 错误

    我创建了一个非常简单的测试用例来重现这个问题 我正在尝试以编程方式将页脚视图设置为表格视图 请注意 我指的是表格视图最底部的页脚 而不是部分页脚 大多数堆栈溢出答案都会使他们感到困惑 这是我的非常简单的代码 void viewDidLoad
  • 矩形相交

    是否有任何已知的方法来计算两个矩形之间的相交矩形 我的意思是 如果矩形 A 由 x1 y2 x2 y2 定义 B 由 x3 y3 x4 y4 定义 那么如何计算相交矩形 C x5 y5 x6 y6 的坐标 Thanks 相交多边形的一般问题
  • 使用三点系统计算模型中的压痕深度?

    通过光线投射 我们可以选择游戏对象碰撞器上的一个点 在简短的视觉效果中 三个点用小球体表示 表示用户选择 我们的愿望是计算模型压痕中任何点的深度 当前的想法是使用一种系统 其中用户选择压痕深度之外的两个点和压痕深度内的一个点来计算压痕深度