ошибка при использовании WebGLRenderer() с 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 );

теперь console.log() из _canvas показывает: [Canvas 0x0]

Кто-нибудь сталкивался с чем-то подобным?


person bks    schedule 25.02.2014    source источник
comment
Вы смогли это решить? Есть какие-то инсайты? Пытаюсь использовать headless-gl, но терплю неудачу в том же месте, что и вы.   -  person gaitat    schedule 24.07.2018
comment
Не удалось решить эту проблему, и, если я правильно помню, мы в конце концов отказались от headless-gl и полностью переключились на что-то другое на стороне клиента.   -  person bks    schedule 25.07.2018


Ответы (1)


Обычно это происходит, когда вы уже получили 2D-контекст из _canvas. И 2D-контекст, и gl не могут быть получены с одного и того же холста. Если это не так, можете ли вы подтвердить, что вы можете успешно запустить любой другой пример WebGL независимо (из node.js)?

person Prabindh    schedule 25.02.2014
comment
У меня нет полученного 2D-контекста, поскольку я не передаю ни одного элемента холста, three.js создает его сам по себе, а первый вызов getContext() находится в строке # 25856. Найдет образец WebGL и попытается запустить его вне node.js - person bks; 25.02.2014
comment
Долго искал, ничего конкретного не нашел. Кроме того, при попытке getContext('webgl') с модулем canvas (npm install canvas) я получил неопределенность. Можете ли вы указать мне правильное направление? - person bks; 25.02.2014
comment
я пробовал с модулем холста, он возвращает undefined. также, когда модуль three.js создает контекст webgl, он пытается сделать это с помощью getContext('webgl') или getContext('experimental-webgl'), в моем случае это не работает. - person bks; 26.02.2014
comment
Чтобы немного изолировать, вы можете попробовать пример использования, приведенный в модуле node-webgl (npmjs.org/ пакет/узел-webgl) ? - person Prabindh; 26.02.2014
comment
Попробую это, также я нашел headless-gl, который должен быть еще проще, но оба имеют некоторые зависимости, поэтому это займет некоторое время. Спасибо, пока! - person bks; 26.02.2014