@@ -239,7 +239,7 @@ define([
239
239
vertexShaderMain += ' vec3 weightedNormal = a_normal;\n' ;
240
240
}
241
241
if ( hasTangents ) {
242
- vertexShaderMain += ' vec3 weightedTangent = a_tangent;\n' ;
242
+ vertexShaderMain += ' vec4 weightedTangent = a_tangent;\n' ;
243
243
}
244
244
if ( hasMorphTargets ) {
245
245
for ( var k = 0 ; k < morphTargets . length ; k ++ ) {
@@ -258,7 +258,7 @@ define([
258
258
} else if ( targetAttribute === 'NORMAL' ) {
259
259
vertexShaderMain += ' weightedNormal += u_morphWeights[' + k + '] * a_' + attributeLower + ';\n' ;
260
260
} else if ( targetAttribute === 'TANGENT' ) {
261
- vertexShaderMain += ' weightedTangent += u_morphWeights[' + k + '] * a_' + attributeLower + ';\n' ;
261
+ vertexShaderMain += ' weightedTangent.xyz += u_morphWeights[' + k + '] * a_' + attributeLower + ';\n' ;
262
262
}
263
263
}
264
264
}
@@ -305,13 +305,14 @@ define([
305
305
techniqueAttributes . a_tangent = 'tangent' ;
306
306
techniqueParameters . tangent = {
307
307
semantic : 'TANGENT' ,
308
- type : WebGLConstants . FLOAT_VEC3
308
+ type : WebGLConstants . FLOAT_VEC4
309
309
} ;
310
- vertexShader += 'attribute vec3 a_tangent;\n' ;
311
- vertexShader += 'varying vec3 v_tangent;\n' ;
312
- vertexShaderMain += ' v_tangent = (u_modelViewMatrix * vec4(weightedTangent, 1.0)).xyz;\n' ;
310
+ vertexShader += 'attribute vec4 a_tangent;\n' ;
311
+ vertexShader += 'varying vec4 v_tangent;\n' ;
312
+ vertexShaderMain += ' v_tangent.xyz = u_normalMatrix * weightedTangent.xyz;\n' ;
313
+ vertexShaderMain += ' v_tangent.w = weightedTangent.w;\n' ;
313
314
314
- fragmentShader += 'varying vec3 v_tangent;\n' ;
315
+ fragmentShader += 'varying vec4 v_tangent;\n' ;
315
316
}
316
317
317
318
// Add texture coordinates if the material uses them
@@ -420,8 +421,8 @@ define([
420
421
if ( defined ( parameterValues . normalTexture ) ) {
421
422
if ( hasTangents ) {
422
423
// Read tangents from varying
423
- fragmentShader += ' vec3 t = normalize(v_tangent);\n' ;
424
- fragmentShader += ' vec3 b = normalize(cross(ng, t));\n' ;
424
+ fragmentShader += ' vec3 t = normalize(v_tangent.xyz );\n' ;
425
+ fragmentShader += ' vec3 b = normalize(cross(ng, t) * v_tangent.w );\n' ;
425
426
fragmentShader += ' mat3 tbn = mat3(t, b, ng);\n' ;
426
427
fragmentShader += ' vec3 n = texture2D(u_normalTexture, ' + v_texcoord + ').rgb;\n' ;
427
428
fragmentShader += ' n = normalize(tbn * (2.0 * n - 1.0));\n' ;
0 commit comments