грешка при използване на 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 контекст - тъй като не подавам никакъв елемент canvas, three.js създава такъв сам и първото извикване на getContext() е на ред #25856. Ще намери някакъв WebGL образец и ще се опита да го стартира извън node.js - person bks; 25.02.2014
comment
Търсих известно време, но не намерих нещо конкретно. Освен това, когато се опитвах да getContext('webgl') с модула canvas (npm install canvas), получих undefined. Можете ли да ме насочите в правилната посока? - person bks; 25.02.2014
comment
Опитах с модула canvas, той връща 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