|
@@ -50,10 +50,10 @@
|
|
var gui;
|
|
var gui;
|
|
|
|
|
|
var API = {
|
|
var API = {
|
|
- translateX: 0,
|
|
|
|
- translateY: 0,
|
|
|
|
- scaleX: 0.25,
|
|
|
|
- scaleY: 0.25,
|
|
|
|
|
|
+ offsetX: 0,
|
|
|
|
+ offsetY: 0,
|
|
|
|
+ repeatX: 0.25,
|
|
|
|
+ repeatY: 0.25,
|
|
rotation: Math.PI / 4, // positive is counter-clockwise
|
|
rotation: Math.PI / 4, // positive is counter-clockwise
|
|
centerX: 0.5,
|
|
centerX: 0.5,
|
|
centerY: 0.5
|
|
centerY: 0.5
|
|
@@ -87,6 +87,7 @@
|
|
var loader = new THREE.TextureLoader();
|
|
var loader = new THREE.TextureLoader();
|
|
var texture = loader.load( 'textures/UV_Grid_Sm.jpg', render );
|
|
var texture = loader.load( 'textures/UV_Grid_Sm.jpg', render );
|
|
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
|
|
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
|
|
|
|
+
|
|
texture.matrixAutoUpdate = false;
|
|
texture.matrixAutoUpdate = false;
|
|
|
|
|
|
var material = new THREE.MeshBasicMaterial( { map: texture } );
|
|
var material = new THREE.MeshBasicMaterial( { map: texture } );
|
|
@@ -122,9 +123,30 @@
|
|
|
|
|
|
function updateUvTransform() {
|
|
function updateUvTransform() {
|
|
|
|
|
|
- var matrix = mesh.material.map.matrix;
|
|
|
|
|
|
+ var texture = mesh.material.map;
|
|
|
|
+
|
|
|
|
+ if ( texture.matrixAutoUpdate === true ) {
|
|
|
|
+
|
|
|
|
+ texture.offset.set( API.offsetX, API.offsetY );
|
|
|
|
+ texture.repeat.set( API.repeatX, API.repeatY );
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ //texture.matrix.setUvTransform( API.offsetX, API.offsetY, API.repeatX, API.repeatY, API.rotation, API.centerX, API.centerY );
|
|
|
|
+ //console.log( texture.matrix.elements );
|
|
|
|
+
|
|
|
|
+ texture.matrix
|
|
|
|
+ .identity()
|
|
|
|
+ .translate( - API.centerX, - API.centerY )
|
|
|
|
+ .rotate( API.rotation ) // I don't understand how rotation can preceed scale, but it seems to be required...
|
|
|
|
+ .scale( API.repeatX, API.repeatY )
|
|
|
|
+ .translate( API.centerX, API.centerY )
|
|
|
|
+ .translate( API.offsetX, API.offsetY );
|
|
|
|
+
|
|
|
|
+ //console.log( texture.matrix.elements );
|
|
|
|
+ //console.log( '-------------')
|
|
|
|
|
|
- matrix.setUvTransform( API.translateX, API.translateY, API.scaleX, API.scaleY, API.rotation, API.centerX, API.centerY );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
render();
|
|
render();
|
|
|
|
|
|
@@ -136,10 +158,10 @@
|
|
|
|
|
|
gui = new dat.GUI();
|
|
gui = new dat.GUI();
|
|
|
|
|
|
- gui.add( API, 'translateX', 0.0, 1.0 ).name( 'offset.x' ).onChange( updateUvTransform );
|
|
|
|
- gui.add( API, 'translateY', 0.0, 1.0 ).name( 'offset.y' ).onChange( updateUvTransform );
|
|
|
|
- gui.add( API, 'scaleX', 0.25, 2.0 ).name( 'repeat.x' ).onChange( updateUvTransform );
|
|
|
|
- gui.add( API, 'scaleY', 0.25, 2.0 ).name( 'repeat.y' ).onChange( updateUvTransform );
|
|
|
|
|
|
+ gui.add( API, 'offsetX', 0.0, 1.0 ).name( 'offset.x' ).onChange( updateUvTransform );
|
|
|
|
+ gui.add( API, 'offsetY', 0.0, 1.0 ).name( 'offset.y' ).onChange( updateUvTransform );
|
|
|
|
+ gui.add( API, 'repeatX', 0.25, 2.0 ).name( 'repeat.x' ).onChange( updateUvTransform );
|
|
|
|
+ gui.add( API, 'repeatY', 0.25, 2.0 ).name( 'repeat.y' ).onChange( updateUvTransform );
|
|
gui.add( API, 'rotation', - 2.0, 2.0 ).name( 'rotation' ).onChange( updateUvTransform );
|
|
gui.add( API, 'rotation', - 2.0, 2.0 ).name( 'rotation' ).onChange( updateUvTransform );
|
|
gui.add( API, 'centerX', 0.0, 1.0 ).name( 'center.x' ).onChange( updateUvTransform );
|
|
gui.add( API, 'centerX', 0.0, 1.0 ).name( 'center.x' ).onChange( updateUvTransform );
|
|
gui.add( API, 'centerY', 0.0, 1.0 ).name( 'center.y' ).onChange( updateUvTransform );
|
|
gui.add( API, 'centerY', 0.0, 1.0 ).name( 'center.y' ).onChange( updateUvTransform );
|