web-dev-qa-db-fra.com

Comment rendre three.js dans node.js?

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.

18
Funkodebat

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

18
Funkodebat

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

0
Programah