Three.js: шейдер Френеля — источники света: реальная проблема

У меня есть небольшая проблема с примером three.js шейдер Френеля.

'lights : true' - если это 'true', я получаю следующую ошибку:

Uncaught TypeError: Cannot set property 'value' of undefined 

Я не знаю. Спасибо за любые предложения.


person SuddenHero    schedule 04.08.2013    source источник


Ответы (1)


Когда вы установите ShaderMaterial.lights = true, рендерер заполнит для вас единые параметры шейдерного освещения.

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

THREE.FresnelShader не использует свет, как написано; вместо этого он полагается на карту окружения. Следовательно, установка lights: true не будет иметь никакого эффекта.

Но если вы хотите это сделать и хотите изменить шейдер, вам нужно заменить

var shader = THREE.FresnelShader;
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );

с

var shader = THREE.FresnelShader;

var uniforms = THREE.UniformsUtils.merge( [

    THREE.UniformsLib[ "lights" ],
    shader.uniforms

] );

три.js р.59

person WestLangley    schedule 04.08.2013
comment
Могу я отправить вам пиво? :) Спасибо за объяснение! - person SuddenHero; 04.08.2013
comment
Я бы хотел, но моя репутация явно недостаточно высока... все эти часы, проведенные за игрой в GTA2... бесполезны. Скажите мне одну вещь, как вы думаете, возможно ли также добавить диффузный цвет к материалу шейдера? Я знаю, что он использует карту env для цвета, но, может быть, для этого есть метод смешивания? Или материал Френеля... - person SuddenHero; 04.08.2013
comment
Если у вас есть дополнительные проблемы, вам нужно сделать новый пост. Это на благо других... Да все можно сделать. Изучите примеры three.js. Это крутая кривая обучения. Я бы посоветовал вам сначала запрограммировать цвет. Позже передайте цвет. - person WestLangley; 04.08.2013
comment
stackoverflow.com/questions/18046248/ я разместил его здесь. Я не улавливаю часть передачи цвета шейдеру: / Я не профессионал шейдеров ... Спасибо за любую помощь. - person SuddenHero; 04.08.2013