自新的threejs版本(r65)发布以来,uvOffset和uvScale被移动到texture.offset和texture.repeate。
不幸的是,texture.offset对我来说并不适用于我想要完成的任务。我想在场景中显示多个使用相同纹理的精灵。纹理是具有不同瓷砖的纹理图集。如果我更改了texture.offset,则会更改场景中所有精灵的纹理。有没有解决方案只为每个精灵单独更改偏移量?
我认为uvOffset做得很好,我不明白为什么会被移动。
以下是一些代码,可以看到我要做的事情:
var gui_texture = THREE.ImageUtils.loadTexture('images/button.png');
var btn_material1 = new THREE.SpriteMaterial( { map:gui_texture } );
btn_material1.map.offset.set(0.5,0);
var button = new THREE.Sprite(btn_material1);
button1.position.set(-screen_half_x+50, screen_half_y-25, 1);
button1.scale.set(100, 50, 1);
gui_node.add(button1);
var btn_material2 = new THREE.SpriteMaterial( { map:gui_texture } );
btn_material2.map.offset.set(-0.5,0);
var button2 = new THREE.Sprite(btn_material2);
button2.position.set(-screen_half_x+50, screen_half_y-150, 1);
button2.scale.set(100, 50, 1.0);
gui_node.add(button2);
此致
马库斯
答案 0 :(得分:1)
我意识到这不是最漂亮的......但试试这个:
var texture1 = new THREE.Texture();
texture1.offset.set( 0.5, 0 );
var texture2 = new THREE.Texture();
texture2.offset.set( - 0.5, 0 );
var loader = new THREE.ImageLoader();
loader.load( 'images/button.png', function ( image ) {
texture1.image = image;
texture1.needsUpdate = true;
texture2.image = image;
texture2.needsUpdate = true;
} );
var button1 = new THREE.Sprite( new THREE.SpriteMaterial( { map:texture1 } ) );
button1.position.set( - screen_half_x + 50, screen_half_y - 25, 1 );
button1.scale.set( 100, 50, 1 );
gui_node.add( button1 );
var button2 = new THREE.Sprite( new THREE.SpriteMaterial( { map:texture2 } ) );
button2.position.set( - screen_half_x + 50, screen_half_y - 150, 1 );
button2.scale.set( 100, 50, 1.0 );
gui_node.add( button2 );