2016-11-22 1 views
0

WebGLRendererをサーバー上で実行する必要がありますが、これに関するさまざまな声があります。いくつかの人は、それが可能ではないと言ういくつかの彼らはしようとしているそれを働かせるが、それは議論が終わるときです。node.jsサーバーでThree.js WebGLRendererを実行することはできますか?

これを行うことは可能でしょうか?その場合、アプローチは何ですか? node-glなどと組み合わせたmoch-browserを使用することは可能ですか?

[編集] 追加ソリューション

+0

何がレンダリング結果をどうする予定ですか?ユーザーのブラウザにストリームを戻すか、ファイルに保存するか... ...? – Matey

+0

@Mateyそれをユーザーにストリームしてpngとして返します。 – JakobMillah

+0

一連のPNGをストリームしますか?または、1つのPNGファイルを送信しますか? – Matey

答えて

1

を試みることができます。シーンとそのオブジェクトのサイズに応じて、時間がかかることがあります。私の場合、オブジェクトのかなり小さなバージョンを返すが、400x400px pngで応答するのに約400msかかる。これが誰かを助けることを願っています!

enter image description here

Server.js

var THREE = require("three.js"); 

// Create a DOM 
var MockBrowser = require('mock-browser').mocks.MockBrowser; 
var mock = new MockBrowser(); 
var document = MockBrowser.createDocument(); 
var window = MockBrowser.createWindow(); 

//REST API 
var express  = require('express');  
var app   = express();  
var bodyParser = require('body-parser'); 
var router = express.Router(); 

var gl = require('gl')(1,1); //headless-gl 

var pngStream = require('three-png-stream'); 
var port = process.env.PORT || 8080; 

router.get('/render', function(req, res){ 

    var scene = new THREE.Scene(); 
    var camera = new THREE.PerspectiveCamera(75, this.width/this.height, 0.1, 1000); 
    var renderer = new THREE.WebGLRenderer({context:gl}); 

    scene.add(camera); 

    renderer.setSize(this.width, this.height); 
    renderer.setClearColor(0xFFFFFF, 1); 

    /*... 
     Add your objects & light to the scene 
    ...*/ 

    var target = new THREE.WebGLRenderTarget(this.width, this.height); 
    renderer.render(scene, camera, target); 


    res.setHeader('Content-Type', 'image/png'); 
    pngStream(renderer, target).pipe(res); 
}); 

app.use('/api', router); 

app.listen(port); 
console.log('Server active on port: ' + port); 
1

あなたがheadless-glを試みることができるが、あなたが必要な場合にはDOMと(テクスチャロード用)イメージタグとキャンバスタグおよび/またはCanvas2Dをエミュレートするために、いくつかの他のライブラリを使用する必要があるだろうそれだけでなく。

そうしないと、多分shell to a browser running on top of OSMESAまたはこれが問題に私の独自のソリューションですheadless chromium

+0

はい、headless-glは私が使い終わったものでした!これは、DOMを生成するためのモックブラウザと組み合わせたものです。レンダリングをクライアントにストリーミングするための3つのストリーム(pngストリーム)。 – JakobMillah

関連する問題