gpt4 book ai didi

3d - 如何在视觉上将贝塞尔曲线的透视投影与原始曲线匹配,仅投影其控制点?

转载 作者:行者123 更新时间:2023-12-04 10:21:48 25 4
gpt4 key购买 nike

我正在编写一个三次贝塞尔曲线编辑器,旨在让您在 3D 世界中创建、选择和修改贝塞尔曲线。

我目前正在研究选择/挑选界面。我希望能够根据用户从屏幕空间中曲线的实际投影表示单击多远(就像素数而言)来选择曲线。

我的第一种方法是使用从相机原点转换的与曲线三次段的边界框相交的拾取射线段在 3D 中进行强力数值分析。我使用二分法搜索来找到曲线上离射线最近的点的近似值。
它有效,但在用例中缺乏鲁棒性,并且还需要根据相机与曲线上点之间的距离来缩放选择距离设置。对我来说,这也不是一个足够优雅的实现。 ;)

我目前的想法是在近平面上手动投影曲线段,以获得可以进行数值分析的投影贝塞尔曲线。此外,之前的拾取射线参数现在将减少到一个点:用户单击视口(viewport)的位置。

不幸的是,在原型(prototype)制作出来之前我担心的是:贝塞尔曲线在平面上的投影并不完全是通过投影其控制点获得的曲线。在进一步阅读该主题后(我一般数学很糟糕),似乎投影曲线以某种方式退化为一条表达方式不同的理性贝塞尔曲线。
新曲线的视觉表示与原始曲线不匹配,看起来相当接近,但我需要像素完美匹配。

对于我的问题,我还有其他选择可以探索,例如预测选择 在场景中,或投影曲线段曾经离散为折线。不过,我想知道,是否存在通过重新参数化或使用数学技巧更改投影曲线来解决我当前问题的快速简便的方法,我自己无法弄清楚。

提前致谢。

编辑 投影图像示例:http://i.imgur.com/1XawRof.png

最佳答案

使用适当的 View 矩阵将贝塞尔曲线的控制点投影到近平面上应该会产生与您在视口(viewport)中看到的相同的有理贝塞尔曲线。

问题可能源于许多问题。如果这是我的代码,这就是我会尝试的:

  • 确保正确完成对平面的投影。您需要使用世界到近平面透视投影矩阵,而不仅仅是将输入贝塞尔控制点投影到 View 平面。矩阵的透视投影部分使多项式控制点变得有理。
  • 您可以创建一条 3d 折线并通过透视矩阵将折线投影到您的近平面。您的折线点应该是合理的,并且应该与您在视觉上看到的完全匹配(尽管对于折线,合理的点根本不会改变渲染)。这是检查投影是否正常工作的好方法。
  • 确保您的理性曲线评估工作正常。做到这一点的一个好方法是在 2d 中渲染一个有理圆弧,并确保输出点完全是圆形的。我会以数字方式执行此操作,以避免与投影/查看产生任何混淆。


  • 因此,有几种不同的方法可以评估合理的贝塞尔曲线。我最喜欢的方法是使用简单的方程进行评估,但在同质点类型上,但我见过有人单独对权重求和,或者通过将控制点乘以基矩阵来进行评估。我猜,无论什么工作。

    这是 2d 有理曲线评估的一个很好的测试。让我们从以原点为中心的圆弧开始。我们将使用 2 次有理贝塞尔曲线。这些点将存储为 [xw, yw, w]。

    这三点是:

    P0 = [ 1, 0, 1 ], P1 = [ 0.707107, 0.707107, 0.707107 ], P2 = [ 0, 1, 1 ]

    其中 0.707107 实际上是 sqrt(2)/2

    如果我们在 t=0.5 时对此进行评估,我们得到 P = [ 0.603553, 0.603553, 0.853553 ]

    如果我们除掉 w,那么我们得到 P = [ 0.707107, 0.707107, 1 ]

    希望有帮助.. :)

    关于3d - 如何在视觉上将贝塞尔曲线的透视投影与原始曲线匹配,仅投影其控制点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18921962/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com