如何渲染node.js中的three.js?

如何渲染node.js中的three.js代码?

我想从搅拌机中导出,然后通过fs打开导出,并用它渲染一个场景。

这是一个臭的实现,但要记住的关键部分是创build几何的一部分,其他一切都非常简单。 我主要是把它放在这里供我自己参考,但是它确实有效,在nodejs中有3d渲染是很酷的。 哦,它需要canvas也工作。

它依赖于three.js npm模块https://github.com/uniba/node-three.js

 fs = require("fs") THREE = require("three.js") join = require("path").join app.get '/test/top_:top_id/side_:side_id/x_:x/y_:y.jpg', (req, res, next) => width = 660 height = 500 camera = new THREE.PerspectiveCamera(50, width / height, 1, 1000) scene = new THREE.Scene() renderer = new THREE.CanvasRenderer( ) renderer.setSize width, height camera.position.z = 100 camera_container = new THREE.Object3D scene.add camera_container camera_container.add camera camera.position.z = 75 # We have one background plane plane_image = new Image plane_image.src = fs.readFileSync TOP_DIR + "public/images/vtx_logo.jpg" texture = new THREE.Texture plane_image, new THREE.UVMapping() texture.needsUpdate = true loader = new THREE.JSONLoader() geometry = new THREE.PlaneGeometry(200, 200) material = new THREE.MeshBasicMaterial color : 0x698144 #shading : THREE.SmoothShading map : texture overdraw: true plane = new THREE.Mesh geometry, material plane.position.z = -50 plane.position.y = -4 plane.position.x = 4.5 # We also have an object in the foreground scene.add plane geometry = false loader.createModel JSON.parse(fs.readFileSync(TOP_DIR + 'public/blender_export.json')), (done) => geometry = done # Imager.texture gives us a canvas based on some code that grabs specific info texture = new THREE.Texture (Imager.texture req.params.side_id, req.params.top_id), new THREE.UVMapping() texture.needsUpdate = true material = new THREE.MeshBasicMaterial color: 0xaaaaaa map: texture overdraw: true mesh = new THREE.Mesh geometry, material mesh.rotation.x = parseFloat req.params.x mesh.rotation.y = parseFloat req.params.y scene.add mesh mesh.dynamic = true renderer.render scene, camera renderer.domElement.toBuffer (err, buf) -> res.contentType 'image/jpg' res.send buf 

如果你得到一个错误cannot find ./lib/Three

我提到的three.js模块可能会指向内部的旧版本。 我记得不得不进入模块并编辑require('./lib/Three')require('./lib/three') 。 我想他包括一个非特定的三个在他的package.json,所以它得到更新,而不是他的npm模块正在更新..现在可以修复

我不明白为什么你不能使用电子这样的东西,它允许你创build桌面应用程序并在其中实现node.js。 这不是问题的确切答案,但为了寻找这样的人,我会发布这个答案

你不应该在服务器上运行视觉代码,如果你在服务器上做的计算成本很高,那么你需要做好相当的准备。 你需要的是将导出和渲染委托给客户端机器。