Blender 3D渲染Java servlet接口
我需要使3D渲染在服务器中的静态图像。有人建议我使用JavaServlet。我正在研究它的快速原型,我被卡住了 我应该如何在Java中调用BlenderBlender 3D渲染Java servlet接口,java,servlets,render,blender,Java,Servlets,Render,Blender,我需要使3D渲染在服务器中的静态图像。有人建议我使用JavaServlet。我正在研究它的快速原型,我被卡住了 我应该如何在Java中调用Blender import java.io.*; import javax.servlet.http.*; @WebServlet("/HelloworldInServlet") public class HelloworldInServlet extends HttpServlet { protected void doGet(HttpServl
import java.io.*;
import javax.servlet.http.*;
@WebServlet("/HelloworldInServlet")
public class HelloworldInServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Run Blender on server (localhost for now)
// I need something here??
}
}
我能想到的最简单的解决方案如下:
public class RenderSceneServlet extends HttpServlet {
protected void doGet(HttServletRequest request, HttpServletResponse response) {
String outputFile = "/path/to/output-file";
// execute command to render a frame from scene.blend
Runtime runtime = Runtime.getRuntime();
Process exec = runtime.exec("blender -b scene.blend -o " + outputFile + " -F JPEG -x 1 -f 1");
// wait for blender to finish
exec.waitFor();
// serve the rendered file
File file = new File(outputFile);
byte[] bytes = FileUtils.readFileToByteArray(file);
response.setContentLength(bytes.length);
response.setContentType("image/jpeg");
response.getOutputStream().write(bytes);
}
}
你应该记住几件事:
- 为
使用交替名称,否则每次并发请求都会覆盖该文件outputFile
- 是apache commons io中的一个类
- 我不太熟悉blender,因此命令行“blender-b scene.blend-o[…]”可能需要额外注意
commons io
jar放在你的servlet容器(=服务器)的lib文件夹中,要么你把它放在你的应用程序中的WEB-INF/lib
@我让它工作了。谢谢现在我想使用request.getParameter(“场景”)来选择要渲染的3D场景。可能有5个输入参数。所以,将所有内容放在URL中可能是一个负担过重(GET)。我怎样才能邮寄呢??我研究了一下才发现。我应该在HTML中硬编码吗??提前感谢。请使用谷歌查找有关在servlet中处理表单数据的教程。如果您的参数是“简单”值,如整数或短字符串,您可能应该坚持获取。使用GET,您可以提供诸如主机/HelloworldInServlet?scene=foo.blend&output=foo.jpg之类的链接,并且不需要表单或javascript来调用servlet。简单的GET方法可以工作。谢谢所以我假设,当我将Java代码放入服务器时,它会同时处理许多客户机请求。在需要许可证的服务器上运行的软件呢?Java线程是否生成并运行一个面向百万用户的软件?