@@ -94,7 +94,7 @@ define([
94
94
var sampler = gltf . samplers [ gltf . textures [ textureIndex ] . sampler ] ;
95
95
96
96
var repeatS = sampler . wrapS === WebGLConstants . REPEAT ? 'true' : 'false' ;
97
- var repeatT = sampler . wrapS === WebGLConstants . REPEAT ? 'true' : 'false' ;
97
+ var repeatT = sampler . wrapT === WebGLConstants . REPEAT ? 'true' : 'false' ;
98
98
99
99
texCoord = textureName + 'Coord' ;
100
100
result . fragmentShaderMain += ' vec2 ' + texCoord + ' = computeTexCoord(' + defaultTexCoord + ', ' + textureName + 'Offset, ' + textureName + 'Rotation, ' + textureName + 'Scale, ' + repeatS + ', ' + repeatT + ');\n' ;
@@ -108,6 +108,22 @@ define([
108
108
var DEFAULT_TEXTURE_ROTATION = [ 0.0 ] ;
109
109
var DEFAULT_TEXTURE_SCALE = [ 1.0 , 1.0 ] ;
110
110
111
+ function handleKHRTextureTransform ( parameterName , value , generatedMaterialValues ) {
112
+ if ( parameterName . indexOf ( 'Texture' ) === - 1 || ! defined ( value . extensions ) || ! defined ( value . extensions . KHR_texture_transform ) ) {
113
+ return ;
114
+ }
115
+
116
+ var uniformName = 'u_' + parameterName ;
117
+ var extension = value . extensions . KHR_texture_transform ;
118
+ generatedMaterialValues [ uniformName + 'Offset' ] = defaultValue ( extension . offset , DEFAULT_TEXTURE_OFFSET ) ;
119
+ generatedMaterialValues [ uniformName + 'Rotation' ] = defaultValue ( extension . rotation , DEFAULT_TEXTURE_ROTATION ) ;
120
+ generatedMaterialValues [ uniformName + 'Scale' ] = defaultValue ( extension . scale , DEFAULT_TEXTURE_SCALE ) ;
121
+
122
+ if ( defined ( value . texCoord ) && defined ( extension . texCoord ) ) {
123
+ generatedMaterialValues [ uniformName ] . texCoord = extension . texCoord ;
124
+ }
125
+ }
126
+
111
127
function generateTechnique ( gltf , material , materialIndex , generatedMaterialValues , primitiveByMaterial , options ) {
112
128
var addBatchIdToGeneratedShaders = defaultValue ( options . addBatchIdToGeneratedShaders , false ) ;
113
129
@@ -120,24 +136,15 @@ define([
120
136
121
137
var uniformName ;
122
138
var parameterName ;
139
+ var value ;
123
140
var pbrMetallicRoughness = material . pbrMetallicRoughness ;
124
141
if ( defined ( pbrMetallicRoughness ) && ! useSpecGloss ) {
125
142
for ( parameterName in pbrMetallicRoughness ) {
126
143
if ( pbrMetallicRoughness . hasOwnProperty ( parameterName ) ) {
127
- var value = pbrMetallicRoughness [ parameterName ] ;
144
+ value = pbrMetallicRoughness [ parameterName ] ;
128
145
uniformName = 'u_' + parameterName ;
129
146
generatedMaterialValues [ uniformName ] = value ;
130
-
131
- if ( parameterName . indexOf ( 'Texture' ) >= 0 && defined ( value . extensions ) && defined ( value . extensions . KHR_texture_transform ) ) {
132
- var extension = value . extensions . KHR_texture_transform ;
133
- generatedMaterialValues [ uniformName + 'Offset' ] = defaultValue ( extension . offset , DEFAULT_TEXTURE_OFFSET ) ;
134
- generatedMaterialValues [ uniformName + 'Rotation' ] = defaultValue ( extension . rotation , DEFAULT_TEXTURE_ROTATION ) ;
135
- generatedMaterialValues [ uniformName + 'Scale' ] = defaultValue ( extension . scale , DEFAULT_TEXTURE_SCALE ) ;
136
-
137
- if ( defined ( value . texCoord ) && defined ( extension . texCoord ) ) {
138
- generatedMaterialValues [ uniformName ] . texCoord = extension . texCoord ;
139
- }
140
- }
147
+ handleKHRTextureTransform ( parameterName , value , generatedMaterialValues ) ;
141
148
}
142
149
}
143
150
}
@@ -146,16 +153,20 @@ define([
146
153
var pbrSpecularGlossiness = material . extensions . KHR_materials_pbrSpecularGlossiness ;
147
154
for ( parameterName in pbrSpecularGlossiness ) {
148
155
if ( pbrSpecularGlossiness . hasOwnProperty ( parameterName ) ) {
156
+ value = pbrSpecularGlossiness [ parameterName ] ;
149
157
uniformName = 'u_' + parameterName ;
150
- generatedMaterialValues [ uniformName ] = pbrSpecularGlossiness [ parameterName ] ;
158
+ generatedMaterialValues [ uniformName ] = value ;
159
+ handleKHRTextureTransform ( parameterName , value , generatedMaterialValues ) ;
151
160
}
152
161
}
153
162
}
154
163
155
164
for ( var additional in material ) {
156
165
if ( material . hasOwnProperty ( additional ) && ( ( additional . indexOf ( 'Texture' ) >= 0 ) || additional . indexOf ( 'Factor' ) >= 0 ) ) {
166
+ value = material [ additional ] ;
157
167
uniformName = 'u_' + additional ;
158
- generatedMaterialValues [ uniformName ] = material [ additional ] ;
168
+ generatedMaterialValues [ uniformName ] = value ;
169
+ handleKHRTextureTransform ( additional , value , generatedMaterialValues ) ;
159
170
}
160
171
}
161
172
@@ -547,14 +558,12 @@ define([
547
558
fragmentShader +=
548
559
'vec2 computeTexCoord(vec2 texCoords, vec2 offset, float rotation, vec2 scale, bool repeatS, bool repeatT) \n' +
549
560
'{\n' +
550
- ' mat3 translationMatrix = mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, offset.x, offset.y, 1.0); \n' +
551
561
' rotation = -rotation; \n' +
552
- ' mat3 rotationMatrix = mat3(\n' +
553
- ' cos(rotation), sin(rotation), 0.0, \n' +
554
- ' -sin(rotation), cos(rotation), 0.0, \n' +
555
- ' 0.0, 0.0, 1.0); \n' +
556
- ' mat3 scaleMatrix = mat3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 1.0); \n' +
557
- ' vec2 transformedTexCoords = ((translationMatrix * rotationMatrix * scaleMatrix) * vec3(fract(texCoords), 1.0)).xy; \n' +
562
+ ' mat3 transform = mat3(\n' +
563
+ ' cos(rotation) * scale.x, sin(rotation) * scale.x, 0.0, \n' +
564
+ ' -sin(rotation) * scale.y, cos(rotation) * scale.y, 0.0, \n' +
565
+ ' offset.x, offset.y, 1.0); \n' +
566
+ ' vec2 transformedTexCoords = (transform * vec3(fract(texCoords), 1.0)).xy; \n' +
558
567
' transformedTexCoords.x = repeatS ? fract(transformedTexCoords.x) : clamp(transformedTexCoords.x, 0.0, 1.0); \n' +
559
568
' transformedTexCoords.y = repeatT ? fract(transformedTexCoords.y) : clamp(transformedTexCoords.y, 0.0, 1.0); \n' +
560
569
' return transformedTexCoords; \n' +
0 commit comments