2014-02-25 111 views
1

我想在服務器端渲染一個多維數據集,並能夠使用CanvasRenderer這樣做,但我希望能夠使用WebGLRenderer進行渲染,從而產生更好的結果。我已經收窄,這一代碼片段:與jsdom使用WebGLRenderer()時出現錯誤

var jsdom = require('jsdom') 
, document = jsdom.jsdom('<!doctype html><html><head></head><body></body></html>') 
, window = document.createWindow() 
, THREE = require('three'); 

document.onload = docOnLoad(); 

function docOnLoad() 
{ 
    console.log("docOnLoad called."); 
    global.document = document; 
    global.window = window; 
    //renderer = new THREE.CanvasRenderer(); //works 
    renderer = new THREE.WebGLRenderer(); 
    renderer.setSize(400, 400); 
    document.body.appendChild(renderer.domElement);  
} 

當使用WebGLRenderer,我得到:

_glExtensionTextureFloat = _gl.getExtension('OES_texture_float'); 
          ^
TypeError: Cannot call method 'getExtension' of undefined 
    at initGL (C:\programming\nodejs\node_modules\three\three.js:25870:34) 
嘗試調試three.js所代碼時

,執行console.log(_gl)確實表明_gl是未定義的,並且它的源極是線#25856,其中:的_canvas節目

_gl = _canvas.getContext('webgl', attributes) || _canvas.getContext('experimental-webgl', attributes); 

現在,執行console.log():[Canvas 0x0]

有沒有人遇到類似的東西?

回答

1

通常在您已經從_canvas獲得2D上下文時發生。 2D上下文和gl無法從同一畫布獲取。如果情況並非如此,您是否可以確認您是否能夠獨立成功運行任何其他WebGL示例(來自node.js)?

+0

我沒有獲得2D上下文 - 因爲我沒有傳遞任何canvas元素,three.js創建一個,第一個getContext()調用在#25856行。將找到一些WebGL樣本,並嘗試在node.js之外運行它 – bks

+0

已經搜索了一段時間,沒有找到具體的東西。另外,當試圖使用canvas模塊(npm安裝畫布)getContext('webgl')時,我得到了「undefined」。你能爲我指出正確的方向嗎? – bks

+0

您是否嘗試過「experimental-webgl」? – prabindh