2015-01-21 3 views
3

После беспорядка с this demo of Three.js rendering a scene to a texture я успешно воспроизвел его суть в моем проекте: среди моей основной сцены теперь есть сфера, а на ней нарисована вторичная сцена через буфер THREE.WebGLRenderTarget ,Сцена рендеринга на пользовательскую сетку с тэгом.

Мне действительно не нужна сфера, и вот где я ударил огромную кирпичную стену. При попытке отобразить буфер на мой простой пользовательский сетки, я получаю бесконечный поток из следующих ошибок:

three.js:23444 WebGL: INVALID_VALUE: pixelStorei: invalid parameter for alignment 
three.js:23557 Uncaught TypeError: Cannot read property 'width' of undefined 

Моя геометрия, аппроксимации annular форму, создается с помощью this code. Я успешно UV-сопоставил canvas на нем, передав {map: new THREE.Texture(canvas)} в опции материала, но если я использую {map: myWebGLRenderTarget}, я получу ошибки выше.

Беглый взгляд через стек вызовов делает его похожим Three.js приобретает наличие атрибута texture.image на myWebGLRenderTarget и попытке вызова clampToMaxSize на него.

Это ошибка в three.js или я просто делаю что-то неправильно? Поскольку мне нужен только плоский рендеринг (с MeshBasicMaterial), одно из первых, что я делал при адаптации демонстрации рендеринга к текстуре выше, - это удалить все следы шейдеров, и он отлично справился с сферой. Нужны ли мне эти шейдеры, чтобы использовать UV-отображение и пользовательскую сетку?

ответ

2

Для чего это стоило, я без нужды устанавливал needsUpdate = true на мою текстуру. (Обработка needsUpdate, по-видимому, предполагает наличие <canvas>, на котором основана текстура.)

+1

Ницца, это исправлено для меня. '.needsUpdate' автоматически устанавливается в true при создании нового материала. – dpren

+1

Я немного почесывал голову, делая ту же глупую ошибку. Благодаря! – grouma