我想尝试使用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中完全实现?
答案 0 :(得分:1)
您想要的功能根本不存在于无头NetLogo 3D中。
我认为我们甚至没有想过要添加它有多困难。在我看来,谷歌刚从谷歌“无头JOGL”看来它是可能的。我认为这种情况发生的可能性极小,除非它是作为开源贡献,或者除非有人为它提供资金。
也许你可以通过在virtual X server上运行NetLogo 3D GUI来解决它。 (请注意,我实际上并不知道Xfvb和JOGL是否能很好地协同工作,但看起来似乎有道理。)
或者,您可以考虑使用此代码生成3D可视化:https://github.com/fstonedahl/RayTracing-Extension,与POV-Ray一起使用。