3D 表面 JavaFX

2023-12-08

我正在尝试在 JavaFX 中实现我自己的 3D 表面动画,但我不明白一切都应该如何工作,有人可以帮助我了解哪些应该去哪里吗?

  • 已经知道使用类构建 Mesh 需要类对象TraingleMesh然后必须使用方法添加点mesh.getPoints.addAll(...);但是..我的Function<Double, Double>使用后apply方法根本没有帮助我,因为第一个参数必须是数组浮点类型,而不是double应用一些数据后的变量。

    • 我该如何解决这个问题?
  • 我在这里找到了 @Roland 创建的一些纹理和面的实现:

3D 表面 - 堆栈

  • 纹理和面孔如何工作?

这对我来说真的很重要,感谢您的帮助!


看看 FXyzlibrary。它是开源的,您可以从代码中学习。

对于纹理,看看这个post.

FXyz 有一个SurfacePlotMesh完全满足您的要求的类:根据函数绘制 3D 曲面g = f(x,y),通过使用Function<Point2D, Number> function范围。

它还包括纹理,因此您可以包括密度图Function<Point3D, Number> density。每个值都映射到一种颜色。

检查这个测试Function2DPlotTest here.

使用此代码片段,您可以绘制一个函数:

@Override
public void start(Stage primaryStage) {
    PerspectiveCamera camera = new PerspectiveCamera(true);   
    camera.setTranslateZ(-30);
    SurfacePlotMesh surface = new SurfacePlotMesh(
            p-> Math.sin(p.magnitude() + 1e-10) / (p.magnitude() + 1e-10), 
            20, 20, 100, 100, 4); 
    surface.setCullFace(CullFace.NONE);
    surface.setTextureModeVertices3D(1530, p -> p.magnitude());
    surface.getTransforms().addAll(new Rotate(200, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));

    final Group group = new Group(surface);
    Scene scene = new Scene(group, 600, 400, true, SceneAntialiasing.BALANCED);
    scene.setCamera(camera);

    primaryStage.setScene(scene);
    primaryStage.show(); 
}

SurfacePlotMesh

如果添加密度图:

surface.setTextureModeVertices3D(1530, p -> p.magnitude());

你会得到这个:

Textured SurfacePlotMesh

现在,如果您想要表面的动画,您只需创建一个:

private SurfacePlotMesh surface;
private long lastEffect;

@Override
public void start(Stage primaryStage) {
    PerspectiveCamera camera = new PerspectiveCamera(true);   
    camera.setTranslateZ(-30);
    surface = new SurfacePlotMesh(
            p-> Math.sin(p.magnitude() + 1e-10) / (p.magnitude() + 1e-10), 
            20, 20, 100, 100, 4); 
    surface.setCullFace(CullFace.NONE);
    surface.setTextureModeVertices3D(1530, p -> p.magnitude());
    surface.getTransforms().addAll(new Rotate(200, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS));

    final Group group = new Group(surface);
    Scene scene = new Scene(group, 600, 400, true, SceneAntialiasing.BALANCED);
    scene.setCamera(camera);

    primaryStage.setScene(scene);
    primaryStage.show(); 

    lastEffect = System.nanoTime();
    AtomicInteger count=new AtomicInteger();
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 1_000_000_000l) {
                double t = (count.get() % 5 + 1);
                surface.setFunction2D(p -> Math.sin(t * p.magnitude() + 1e-10)/(t * p.magnitude() + 1e-10));
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
    timerEffect.start();
}

你会得到你的表面动画:

SurfacePlotMesh 2

SurfacePlotMesh 3

SurfacePlotMesh 4

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

3D 表面 JavaFX 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • Android SAF 获取 SD 卡上特定目录的访问权限

    我仍在寻找 但也许有人面临同样的问题 我正在维护一个应用程序 该应用程序将一些数据存储在两个位置 假设在 sdcard example 和 external memory example 上 在迁移到最新的 Android Api 之前 一
  • 如果在哪里使用 Flutter,我无法使用 firestore 中的 orderBy 查询

    我正在从 Firestore 检索列表 并且需要使用查询来检索特定的 UserID 但同时我还需要按时间戳对该列表进行排序 使用 orderBy 在哪里不可能得到这是我的代码 Container height MediaQuery of c
  • 为什么 Ruby 将 FixNum n 哈希为 2n+1?

    为什么 Ruby 对整数进行哈希处理n to 2 n 1 gt gt 0 1 2 3 each x puts x hash 1 3 5 7 我可以看到 您并不总是需要复杂的哈希值 尤其是对于简单的对象 但为什么采用 双倍加 1 规则而不是像
  • 基于 Web 表单的 Web 应用程序 URL,不带“.aspx”,如 stackoverflow.com

    我想知道是否可以在不显示 Webforms 应用程序页面的 URL 的情况下显示 aspx扩大 例如 http stackoverflow com questions ask代替http stackoverflow com question
  • Internet Explorer 11 不稳定的 CSS3 动画

    请参考这个小提琴 http jsfiddle net eQegA 3 div class spinner div spinner width 100px height 100px border 50px solid blue border
  • 设置ggplot2标签背景颜色

    我有这个条形图 group c A A B B value c 25 75 40 76 day c 1 2 1 2 dat data frame group group value value day day dat ggplot data
  • 是否可以为 iPhone 提供临时构建,而不询问设备 ID?

    是否可以为 iPhone 提供临时构建 而不询问设备 ID 我想将应用程序部署给几个人 但我不想要求设备 ID 来创建配置文件和所有其他内容 那可能吗 如果没有 最简单的方法是什么 简单地说 不 如果您担心从测试人员处获取 UDID 的复杂
  • 是否可以从 Swift 中的 UITextView 元素的光标位置获取索引(String.Index)值?

    我正在寻找拉索引值 String Index 从 UITextView 元素的用户光标位置 我正在使用selectedTextRange方法来获取 UITextRange 值 我如何使用它来检索索引值 您可以获取从文档开头到所选范围开头的选
  • 在 Dynamic Linq 中使用“Single”

    我正在尝试将在 Linq 中工作的 Linq 查询转换为能够在动态 linq 中工作 使用 System Linq Dynamic 因为我希望用户能够形成自己的查询 并且将添加此查询字符串在运行时到其他查询字符串上 我有一个疑问 db in
  • Struts 2 中的 ModuleConfig 和 PluginConfig

    我正在从事 Struts 2 迁移工作 我的 Struts 1 应用程序正在使用ModuleConfig and PlugInConfig类 如何在Struts 2中使用这些类 ModuleConfig and PlugInConfig是S
  • 从 main 调用 pthread_exit 可以吗?

    当我打电话时pthread exit from main 程序永远不会终止 我希望程序能够完成 因为我正在退出程序的唯一线程 但它不起作用 看来挂了 include
  • CSV 新行字符

    我有一个 Excel 模板 用于填写数据并将其导出到 CSV 以填充我网站上的以下页面 http play mink7 com ifocus v4 careers php 当我在 Windows 中导出文件时 我得到了正确的新行字符的格式
  • 瞬态变量继承且子类被序列化

    如果从可序列化类继承瞬态变量 并且如果我更改子类中变量的值 瞬态变量是否仅作为瞬态继承 如果子类反序列化会发生什么 反序列化子类后瞬态变量是否会保持其行为并具有默认值 字段不能被继承 只能被隐藏 如果你有一个transient超类中的字段的
  • 当 classProbs=TRUE 时,在 R 中使用 Caret 的 SVM 会产生不同的结果

    当我尝试使用支持向量机提取预测概率时 我提出了以下问题 SVM 通常分类算法的概率截止值为 0 5 但我需要分析准确性如何随概率截止而变化SVM机器学习算法 I used caret封装在R留一交叉验证 LOOCV 首先 我安装了常规支持向
  • 如何使用 AngularJS 在 ng-init 中传递作用域变量

    我在将从范围声明的变量传递到 ng init 时遇到问题 到目前为止我有这样的事情 scope x 10 div 如何从 ng init 函数内的范围传递 x var 很多人会告诉你不应该这样做 正如这里的文档中提到的 https docs
  • matlab dymola 连接在一段时间后失败

    我有 mat 文件中的实验数据和用 dymola 编写的模型 我使用 dymolaM m 文件将命令从 matlab 发送到 dymola 这样我就可以使用 matlab 来优化模型的参数 Matlab从 mat文件中读取数据 以正确的方式
  • 从 sqlalchemy core 中的函数调用中选择列

    在 postgresql 我有select col1 col2 from my function 我怎样才能在 sqlalchemy 核心中做到这一点 select func my function 将结果作为字符串给出 但我想要一个元组
  • 密码字段默认值

    我怎样才能既使用 HTML 密码输入又设置一个可读的文本默认值 因为密码输入会将字符变成点或星号 我可以用 JavaScript 做到这一点吗 所以 如果我理解正确的话 你希望它读取 密码 或普通字母的任何内容 直到有人点击它 此时它会变成
  • 实体框架延迟加载和 ICollection

    假设我有一个名为 Stock 的类 它有一个虚拟的 ICollection 价格 它是一组历史价格 如果您获取股票并在股票具体化后查询价格 但应用像 mystock Prices OrderByDescending px gt px Dat
  • 3D 表面 JavaFX

    我正在尝试在 JavaFX 中实现我自己的 3D 表面动画 但我不明白一切都应该如何工作 有人可以帮助我了解哪些应该去哪里吗 已经知道使用类构建 Mesh 需要类对象TraingleMesh然后必须使用方法添加点mesh getPoints