使用带有jsdom的WebGLRenderer()时出错

时间:2014-02-25 11:24:28

标签: node.js three.js jsdom

我正在尝试在服务器端渲染一个立方体,并且能够使用CanvasRenderer这样做,但我希望能够使用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行,其中:

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

现在,_canvas的console.log()显示:[Canvas 0x0]

有没有人遇到过类似的东西?

1 个答案:

答案 0 :(得分:1)

通常在您已经从_canvas获取2D上下文时发生。无法从同一画布获取2D上下文和gl。如果不是这种情况,您能否确认是否能够独立地(从node.js)成功运行任何其他WebGL示例?