Рендеринг сцены на пользовательской сетке с помощью three.js

После того, как я возился с этой демонстрацией рендеринга сцены в текстуру Three.js, я успешно воспроизвел суть этого в моем проекте: среди моей основной сцены есть сфера now и вторичная сцена рисуется на ней через буфер THREE.WebGLRenderTarget.

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

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

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

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

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


person avramov    schedule 21.01.2015    source источник


Ответы (1)


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

person avramov    schedule 05.02.2015
comment
Хорошо, это исправило это для меня. .needsUpdate автоматически устанавливается в значение true при создании экземпляра нового материала. - person dpren; 22.06.2015
comment
Какое-то время я чесал в затылке, совершая ту же глупую ошибку. Спасибо! - person grouma; 02.09.2015