使用Headless API在NetLogo3D中导出视图

时间:2014-03-30 21:50:19

标签: 3d netlogo java-api

我想尝试使用NetLogo3D模拟制作一个Web应用程序。

由于NetLogo3D 5.0.5还没有(还)支持制作applet,我有意使用" export-view"直接使用API​​并从模拟中输出截图。命令。

到目前为止,这是我的代码:

import org.nlogo.headless.HeadlessWorkspace;

public class main {
  public static void main(String[] argv) {
    System.setProperty("org.nlogo.is3d", "true");
    HeadlessWorkspace workspace = HeadlessWorkspace.newInstance() ;
    try {
      System.out.println("Working Directory = " + System.getProperty("user.dir"));
      workspace.open("MyProject.nlogo3d");
      workspace.command("setup");
      workspace.command("repeat 50 [ go ]") ;
      workspace.command("export-view \"screenshot.jpg\"") ;
      workspace.dispose();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }
}

模拟效果很好,代理人正在移动50个刻度,然后输出截图。

问题在于屏幕截图没有捕获所有元素:所有补丁都是不可见的(即使是那些通常是彩色的补丁),代理也是以2D形状绘制的(即使它们应该具有特定的3D形状,如&#34 ;汽车"。)

导出视图可以很好地从NetLogo3D GUI中运行,因此我无法理解为什么它不应该使用API​​。

我还能做些什么,或者这个命令还没有在Headless API中完全实现?

1 个答案:

答案 0 :(得分:1)

您想要的功能根本不存在于无头NetLogo 3D中。

我认为我们甚至没有想过要添加它有多困难。在我看来,谷歌刚从谷歌“无头JOGL”看来它是可能的。我认为这种情况发生的可能性极小,除非它是作为开源贡献,或者除非有人为它提供资金。

也许你可以通过在virtual X server上运行NetLogo 3D GUI来解决它。 (请注意,我实际上并不知道Xfvb和JOGL是否能很好地协同工作,但看起来似乎有道理。)

或者,您可以考虑使用此代码生成3D可视化:https://github.com/fstonedahl/RayTracing-Extension,与POV-Ray一起使用。