问题标签 [fxyz3d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javafx - 使用 JavaFX 3D 创建坐标网格的最实用方法是什么?
我想用 JavaFX 创建一个 3D 演示应用程序来可视化 3D 空间中点的移动,首先我需要设置一个坐标网格以供视觉参考。不幸的是,我无法找到如下图所示网格的示例代码:
有谁知道创建类似东西的最实用方法是什么?
javafx - 如何在javafx中获取3D对象的窗口上的2D坐标
在 javafx 中,如果我们有 2D HUD(由 Pane 制成,然后我们用它为 2D Hud 创建 SubScene 对象)和 3D SubScene 并且在 3D 场景中我们有一些坐标为 (x,y,z) 的对象 - 我们如何获得 2D如果它在我们的透视相机的视野中,那么它在我们的 HUD 中的坐标?
我试图获取对象的第一个场景坐标,然后将其转换为(sceneToScreen)坐标和窗格的点(0,0)相同,然后从第二点减去第一个点,但我没有得到正确的结果。对不起,因为我的英语不好。有人可以帮忙吗?
javafx - 在javafx中将多个三角形网格添加到场景中的问题
我希望有人可以帮助我解决这个问题。
我正在使用 javafx 和三角形网格从三角形(如足球)中构造一个类似球体的对象。形状的不同瓷砖以颜色区分,但我想在瓷砖之间添加线条。就像在这个足球里:
javafx 提供的 2D 行在 3D 空间中带来了糟糕的性能。因此,我找到了提供PolyLine3D的FXyzLib。这实际上只是在 3D 空间中创建一条线的另一个三角形网格。
有了这个,我可以创建 3D 线。但是如果我想将它们添加到我原来的三角形网格中,其他所有东西都会变黑。反过来也是如此。我尝试了此处提供的库示例。它创建了一条花哨的 3D 线,但是当我尝试在场景中添加一个简单的红色球体时,球体就像这样是黑色的:
.
我不是这方面的专家,也是 javafx 的新手,在PolyLine3D的代码中找不到问题。在场景中添加多个三角形网格应该不是问题。是否有一些我不知道的灯光或相机效果?
编辑:我解决了这个问题。Polyline3D 中使用的环境光导致了问题。如果您为其他对象添加光,那应该没问题。
java - 运行 JAR(Fxyz3d 库)时出现 FileSystemNotFoundException
我构建了一个相当大的 JavaFX 应用程序(JAR 大约 128 MB),并且通过 IntelliJ 运行没有问题。但是当我从终端运行它时,我的 3D 模型加载器(Fxyz3d 库)会启动此异常。
这仅适用于 Fxyz3d 库中的 3D 对象加载器,而不适用于我的其他普通 FXML 加载器。我使用相同的方式从我的 src/main/resources 文件夹中获取文件,即 getClass().getResource。那么这真的是路径问题吗?还是图书馆的问题?相反,在 IntelliJ 中完全没有问题,一切正常。这是代码中不起作用的部分:
如果有人以前遇到过这样的事情并且知道发生了什么,我们将不胜感激
java - 将 Trianglemesh 转换为 FXyz PolygonMesh Javafx
我正在使用 FXyz 库将模型(obj 格式)作为三角形网格导入到我的程序中。我想将这些 Trianglemesh 对象转换为 PolygonMeshes,以便它们可以用作 SkinningMeshes。此过程是否有特定的工作流程?
编辑:我使用 org.fxyz3d.importers.obj.ObjImporter 作为我的 OBJ 加载器。我正在 Blender 2.65 中创建和导出我的模型。Blender 2.65 使用 Wavefront 作为格式。
我最初尝试使用 HandImporter 方法以 ThreeJS 格式加载模型,但它给了我意想不到的结果。但是,OBJImporter 似乎运行良好。我想如果我可以加载 obj 模型并显示它们,那么作为最后的手段,我可以手动将骨骼附加到它们并为它们设置动画。
因为 PolygonMesh 在其任何构造函数中都没有使用 Trianglemesh,所以我假设正在发生某些事情,这可能需要事先进行一些转换。
这是我正在使用的代码片段:
再次感谢。:)
java - 使用 JavaFX 实现 3D 变换 Gizmo
我的目标是在 JavaFX 中创建一个简单的平移和旋转 Gizmo。
有很多例子可以说明如何在 C++ 中实现这一点(例如https://nelari.us/post/gizmos/)。但我无法将此代码转换为 JavaFX。主要是因为使用 JavaFX 无法轻松访问底层数学(例如,从 PerspectiveCamera 获取相机矩阵)。我很难弄清楚如何从可用的 JavaFX 组件中获取正确的成分。
我的计划是实现用于按下和拖动的 MouseEvent 处理程序,然后将拖动运动投影到相应的变换空间(平移、旋转)中。但我真的不知道从哪里开始。
我尝试在线搜索 JavaFX 中的任何实现,但找不到任何东西。
我希望这个社区中的某个人可以帮助我翻译我在本文开头链接的 C++ 教程,或者帮助我在下面链接的代码中为 Gizmo 组件添加正确的拖动处理程序。
下面是一个要点,其中包含一个简单 3D 场景的测试应用程序,该场景包含 Gizmo 和一个简单的相机实现(感谢https://github.com/FXyz/FXyzLib库)。它有很多行,但大多数是由于用于创建视觉元素的类,真正重要的类是 Gizmo 类。
https://gist.github.com/dosier/f075259da0d87f431a361fd300b7e133(代码太长,无法包含在此处)
编辑 #1 - 10 月 8 日:
我尝试为每个拖动锥设置一个拖动检测处理程序,然后在场景中设置一个拖动处理程序。我不希望拖动事件的返回坐标取决于节点是否已相交。我尝试了下面链接的代码,但它没有给出正确的结果。我想如果我弄清楚了我可以得到小玩意的翻译部分功能,那么就只剩下旋转了:
编辑#2 - 10 月 8 日:
因此,我努力移植链接到 JavaFX 的教程中的代码,我设法在 com.sun.javafx 包中找到了一些(实验性)代码,这些代码似乎提供了计算数学所需的所有成分。但我不太了解本教程中数学的所有部分。无论如何,这是我目前进展的要点: https ://gist.github.com/dosier/3481e18dfaaf38a36f4e91b525917642
fxyz3d - 在我的项目中使用 fxyz3d 时构建错误 - 缺少工件
我已经在我的应用程序中使用 fxyz3d ( https://github.com/FXyz/FXyz ) 项目有一段时间了,今天当我在发布之前构建我的项目时,我在通过 maven 运行构建时收到此消息。到今天为止,它已经建成了 6 个月。
有谁知道文物是怎么回事?有谁知道解决方法是什么?
[错误] 未能在项目旅行中执行目标:无法解析项目 com.teamgannon.trips:trips:jar:0.6.8 的依赖项:无法在 org.fxyz3d:fxyz3d:jar:0.5.2 -> org 收集依赖项.jzy3d:jzy3d-jdt-core:jar:1.0.2:无法读取 org.jzy3d:jzy3d-jdt-core:jar:1.0.2 的工件描述符:无法传输工件 org.jzy3d:jzy3d-jdt-core :pom:1.0.2 from/to maven-default-http-blocker ( http://0.0.0.0/ ): 存储库的阻塞镜像: [jzy3d (http://maven.jzy3d.org/releases, 默认, 发布+snapshots)] -> [帮助 1]
javafx - JavaFX 中的 Gouraud 着色
每个面有 3 种颜色(每个顶点一种)。我想使用 Gouraud 着色来混合这些颜色。到目前为止,我从FXyz 库中获得了一些灵感。
我目前的方法使用setTextureModeVertices3D
FXyz 库中的。但这使用密度图,这在我的情况下不起作用,因为颜色不是来自数学公式。我最初的想法是按如下方式实现它:
- 计算网格中每个顶点的颜色。
- 提取所有独特颜色的列表
- 制作独特颜色的调色板
- 以点值 (x,y,z) 为键并以颜色索引为值制作地图
- 制作一个从上述地图返回颜色索引的密度函数。
我有一种感觉,我唯一的选择是创建一个大图像,在其中放入所有阴影三角形,然后引用它们。但我不确定这里最好的技术是什么。任何帮助表示赞赏!
编辑:
这是我目前使用的代码(这是用 Kotlin 编写的):
javafx - 如何设置 fxyz3d 形状材料以使其工作?
如何为 fxyz3d 形状指定材质?当我添加到 3D 对象的 JavaFX 组时,fxyz3d 节点
无论指定的材料是什么,它都会将该组中的每个形状变成纯黑色,而不仅仅是圆锥体。如果我注释掉上面的两行和将圆锥添加到组中的那一行,其他形状的所有显示都会返回到它们指定的外观。
我正在使用 javafx-sdk-17.0.1、fxyz3d-0.5.4.jar、JavaSE-16、Windows 10。Javadoc 在任何地方都可用于 fxyz3d 吗?还是需要下载源码并在本地构建?
redMaterial 定义为
以下代码将重现这一点。照原样,圆锥体和圆柱体都显示为黑色。注释掉创建和添加锥体的四行,圆柱体将显示为材料指定的红色。(不要将此作为起点示例,因为在用户调整舞台窗口大小时自动缩放也存在问题尚未解决。)
java - 如何在 JavaFX 中获取 3D 对象的 2D 场景坐标
我正在尝试创建一个 3D 子场景,其中使用 2D 叠加层中的 Label 对象标记对象。我在这个主题上看到过类似的问题,它们都指向在要在 3D 空间中标记的节点上使用 Node.localToScene 方法。但这似乎不适用于我的情况。我在这里的 FXyz FloatingLabels 示例中获取了示例代码:
Label 对象需要将其位置更新为修改后的 3D 场景,我已经这样做了,但是当我打印出 Node.localToScene 方法返回的坐标时,它们太大而无法在应用程序场景中,并且所以标签在场景中永远不可见。我编写了一个示例程序来说明该问题,其设置与 FXyz 示例代码非常相似,但我创建了一个额外的 SubScene 对象来保存 2D 和 3D SubScene 对象,以便将它们植入带有滑块的更大的应用程序窗口中控制。3D 场景使用透视相机,显示了一个大球体,沿 x/y/z 轴有彩色球体,表面上有一些额外的小块供参考:
您可以使用此脚本编译和运行 LabelTest.java 程序(我在 Mac 上使用 JavaFX 14 和 JDK 14.0.2):
我的测试程序输出包含非常大的标签坐标,它们不代表彩色轴球体的位置,例如:
我的显示如下所示:
它应该看起来更像来自 FXyz 的示例,在轴球体旁边带有标签: