【问题标题】:How to flip the texture of a sprite along the x axis three js?如何沿x轴三个js翻转精灵的纹理?
【发布时间】:2020-05-21 19:47:36
【问题描述】:

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

根据here,我应该可以在需要翻转的方向上将比例设置为-1 (x)。

我写了 2 个加载带有纹理的精灵的示例:

  • first 情况下,比例设置为 (1000, 1000, 1)
  • second 情况下,比例设置为 (-1000, 1000, 1)

在第二种情况下,scale.x 被否定,所以我希望图像在 x 轴上翻转(镜像),但图像看起来仍然与第一种情况相同。

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


编辑: 我发现我可以使用flipY(我没有找到flipX)并将图像旋转180度来翻转图像。 见here

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

谢谢,
阿夫纳

1

【问题讨论】:

    标签: three.js


    【解决方案1】:

    与网格不同,无法使用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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多