如何在Three.js中沿x轴翻转精灵的纹理?

4

我需要在场景中翻转精灵纹理。

根据这里的内容,我应该能够将比例设置为需要翻转(x)的方向的 -1。

我编写了两个示例来加载具有纹理的精灵:

  • 第一个案例中,比例设置为(1000, 1000, 1)
  • 第二个案例中,比例设置为(-1000, 1000, 1)

在第二种情况下,scale.x 被取反,所以我期望图像沿着 x 轴被翻转(镜像),但是图像看起来仍然与第一种情况中的相同。

如何翻转精灵纹理沿着 x 轴?


编辑: 我发现可以使用flipY(我没有找到 flipX )来翻转图像,并将图像旋转 180 度。 在这里查看

这是翻转图像的可接受方式吗?

谢谢,
Avner

1

1个回答

3

与网格不同,使用 Sprite.scale 并不能将其渲染为镜像。建议的方法是通过设置 Texture.repeat(-1, 1)Texture.center(0.5, 0.5),来通过转换纹理坐标来实现。

var camera, scene, renderer;

init();
animate();

function init() {

    camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
    camera.position.z = 1;

    scene = new THREE.Scene();
  
    var loader = new THREE.TextureLoader();
    var map = loader.load( 'https://threejs.org/examples/textures/uv_grid_opengl.jpg' );
    map.center.set( 0.5, 0.5 );
    map.repeat.set( - 1, 1 );

    var material = new THREE.SpriteMaterial( { map: map } );

    var sprite = new THREE.Sprite( material );
    scene.add( sprite );

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

}

function animate() {

    requestAnimationFrame( animate );
    renderer.render( scene, camera );

}
body {
  margin: 0;
}
canvas {
  display: block;
 }
<script src="https://cdn.jsdelivr.net/npm/three@0.116.1/build/three.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接