2013-05-03 2 views
3

Привет Я пытаюсь сделать то, что кажется простым затенением с помощью трех js. Я использую книгу Up и Running O'reilly.Форма три.js для затенения

Все работало отлично, пока я не пытался сделать это:

   var shader = THREE.ShaderLib["normal"]; 
      var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

      uniforms["tNormal"].texture = normalMap; 
      uniforms["tDiffuse"].texture = surfaceMap; 
      uniforms["tSpecular"].texture = specularMap; 

Это продолжает бросать эту ошибку:

TypeError: uniforms.normal не определен [Перерыв на этой ошибке]

Форма ["normal"]. Texture = normalMap;

Я некоторое время смотрел в Интернете и не знаю, какой синтаксис необходимо изменить для решения этой проблемы.

Любая помощь приветствуется.

+0

'shader.uniforms' не имеет атрибута "tNormal". Что вы хотите сделать с этим шейдером? – Ovilia

+0

Я следил за книгой. Я также другие строки для диффузного и зеркального, которые также вызывают подобные ошибки. – dotfury

ответ

5

Я думаю, что должно быть, как:

uniforms["tNormal"] = { 
    texture: normalMap 
}; 

То же самое для tDiffuse, tSpecular.

+0

Спасибо, что, похоже, решает эти ошибки. – dotfury

2

Я считаю, что при запуске коды, после строки:

var shader = THREE.ShaderLib["normal"]; 
var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

униформы объект с одним элементом: непрозрачность. Таким образом, униформа ["tNormal"] еще не существует. Как предложила Оливия, вы можете добавить их в использование:

uniforms["tNormal"] = { 
    texture: normalMap 
}; 
2

Ваша ошибка и ваш код отличаются. Сообщения об ошибках неопределенные текстуру:

uniforms["normal"].texture = normalMap;

вами код привел говорит, что вы используете:

uniforms["tNormal"].texture = normalMap;.

Я работаю на тех же примерах книги, попробуйте следующее:

var shader = THREE.ShaderLib[ "normalmap" ]; 
var uniforms = THREE.UniformsUtils.clone(shader.uniforms); 

uniforms[ "tNormal" ].texture = normalMap; 
uniforms[ "tDiffuse" ].texture = surfaceMap; 
uniforms[ "tSpecular" ].texture = specularMap; 

uniforms[ "enableDiffuse" ].value = true; 
uniforms[ "enableSpecular" ].value = true; 
Смежные вопросы