我该如何在node.js中呈现three.js代码?
我想从Blender导出,然后通过fs
打开导出文件,并对其进行场景渲染。
我该如何在node.js中呈现three.js代码?
我想从Blender导出,然后通过fs
打开导出文件,并对其进行场景渲染。
这个实现方法有点臭,但需要记住的是创建几何图形的部分,其他部分都很简单。我主要是为了以后自己参考而将其放在这里,但它确实可行,使用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
如果您遇到错误无法找到./lib/Three
:
我提到的three.js
模块可能指向三维库的旧版本。我记得曾经需要进入该模块并编辑一个文件,将require('./lib/Three')
修改为require('./lib/three')
。我想他在package.json中包含了一个非特定的three,因此它被更新而没有更新他的npm模块。也许现在已经修复了。
我不明白为什么你不能使用electron这样的东西,它允许你创建桌面应用程序并在其中实现node.js。虽然这并不是对问题的确切答案,但出于寻找这类解决方案的人们的考虑,我将发布此回答。
window
,因此在node.js中可使用。很棒的代码@Funkodebat将缓冲区渲染为图像并传递回来。在线性能如何? - Darryl_Lehmann