问题描述
我正在尝试实现一个 2D 选择窗口,该窗口可以选择 2D 窗口内的 3D 顶点(由虚线青色矩形表示)。我的每个 3D 模型目前都是 MeshView 的复合组,每个面一个 MeshView。我的计划是遍历每个面 (MeshView) 并检查 2D 边界是否与选择框边界相交(我计划稍后使用 Atlas 纹理更新它以减少网格数量,但现在我只想要选择机制工作)。
val selectionBounds = selectionRectangle.boundsInParent
val localBounds = meshView.localToScene(meshView.boundsInLocal,true)
if (selectionBounds.intersects(localBounds))
// do something with the mesh in meshView
我的子场景包含一个透视相机,现在我看到了两个有用的帖子:
- Convert coordinates from 3D scene to 2D overlay
- How to get 2D coordinates on window for 3D object in javafx
我想我必须首先使用我的透视相机正确地投影网格视图的边界。但我不确定如何继续,我是否必须像参考问题 2(上面)中所做的那样将局部边界中的每个 3D 点投影到 2D。不太熟悉数学或相关概念,任何帮助将不胜感激。
(眨眼,眨眼 MVP José)
编辑 1:
根据 José 的建议,我为每个网格视图添加了红色边界框,结果如下:
显然,它增加了一些偏移量,无论相机旋转如何,这些偏移量似乎都相同。在这里,每个网格视图周围都绘制了红色框。将进一步调查..
编辑 2:
我使用一个包含子场景和另一个节点的窗格。这样做是为了控制 SubScene 的大小并通过覆盖 layoutChildren
方法相应地重新定位/调整另一个节点的大小,因此(这是在 Kotlin 中):
override fun layoutChildren() {
val subScene = subSceneProperty.get()
if (subScene != null){
subScene.width = width
subScene.height = height
}
overlayRectangleGroup.resize(width,height)
val nodeWidth = snapSize(overlayMiscGroup.prefWidth(-1.0))
val nodeHeight = snapSize(overlayMiscGroup.prefheight(-1.0))
overlayMiscGroup.resizeRelocate(width - nodeWidth,0.0,nodeWidth,nodeHeight)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)