Javascript 如何水平翻转Three.js纹理

Javascript 如何水平翻转Three.js纹理,javascript,three.js,Javascript,Three.js,我正在制作一个360查看器,所以纹理在圆柱体内。问题是它们看起来是水平倒转的 我知道关于texture.flipY,但我还没有在上找到texture.flipX 那么如何在代码中直接水平或沿x轴翻转纹理呢?(不使用图像编辑器)答案比我想象的要简单 cylinder.scale.x = -1; 别忘了加上 material.side = THREE.DoubleSide; 要水平翻转纹理,可以执行以下操作: texture.wrapS = THREE.RepeatWrapping; textu

我正在制作一个360查看器,所以纹理在圆柱体内。问题是它们看起来是水平倒转的

我知道关于
texture.flipY
,但我还没有在上找到
texture.flipX


那么如何在代码中直接水平或沿x轴翻转纹理呢?(不使用图像编辑器)

答案比我想象的要简单

cylinder.scale.x = -1;
别忘了加上

material.side = THREE.DoubleSide;

要水平翻转纹理,可以执行以下操作:

texture.wrapS = THREE.RepeatWrapping;
texture.repeat.x = - 1;
正如评论中提到的,这种方法要求纹理大小为2的幂


three.js r.87

这里的另一种方法是更改几何体。在圆柱体几何体中,为要渲染的圆柱体部分指定
起点
长度
,通常选择正角度,即
长度>0
。相反,如果将START+TALENGTH和
-TALENGTH
传递给
cylinder BufferGeometry
,则圆柱体将按顺时针方向而不是逆时针方向渲染,并且所有面法线现在都指向内部。因此,无需再翻转纹理。

这似乎有点过分,但我认为一个很好的方法是围绕纹理中心旋转180度(PI弧度),然后翻转纹理:

texture.center=新的3.Vector2(0.5,0.5);
texture.rotation=Math.PI;
texture.flipY=false;

您的问题是关于纹理而非对象的。对于纯纹理(即图像),请使用类似于(ps i’m author)的库。谢谢您的建议@NikosM.three.js不支持负比例因子,它可能会导致不良后果,例如反转缠绕顺序和不正确的法线。我不推荐此答案中建议的方法,即使您可能在其他地方看到过它。由于没有texture.flipX,这似乎是唯一实用的方法。我发现我还需要旋转纹理映射到的对象:object.rotation.y=Math.PI;我这样做了,但我没有翻转纹理,而是在整个对象上扩展了1倍的纹理。我用相机的动态纹理进行了尝试,并渲染到场景平面中,效果很好。plane1.material.map.wrapS=3.RepeatWrapping;plane1.material.map.repeat.x=-1;这是可行的,但它也需要两种纹理大小的能力。与@Pier相同的问题是,1px的图像会在脸上拉伸。图像为512 x 1024。