Comment rendre le code three.js dans node.js?
Je voudrais exporter depuis Blender, puis ouvrir l'exportation via fs
et rendre une scène avec.
C'est une sorte d'implémentation malodorante, mais les éléments clés à retenir sont la partie où la géométrie est créée, tout le reste est assez simple. Je mets principalement ceci ici pour ma propre référence plus tard, mais cela fonctionne et c'est cool d'avoir un rendu 3D dans nodejs. oh oui, cela nécessite une toile pour fonctionner aussi.
il repose sur le module 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
Si vous obtenez une erreur cannot find ./lib/Three
:
Le module three.js
Que j'ai mentionné pourrait pointer vers une ancienne version de trois en interne. Je me souviens avoir dû aller dans le module et éditer un fichier qui require('./lib/Three')
en require('./lib/three')
. Je suppose qu'il a inclus un trois non spécifique dans son package.json, donc il a été mis à jour sans que son module npm soit mis à jour .. pourrait être corrigé maintenant
Je ne vois aucune raison pour laquelle vous ne pourriez pas utiliser quelque chose comme electron , qui vous permet de créer des applications de bureau et d'y implémenter node.js. Ce n'est pas une réponse exacte à la question, mais dans l'intérêt des personnes qui recherchent quelque chose comme ça, je publierai cette réponse