【发布时间】:2015-07-10 13:25:56
【问题描述】:
我正在制作 360 度查看器,因此纹理位于圆柱体内。问题是它们看起来是水平倒置的。
我知道texture.flipY,但我没有在the source 上找到texture.flipX。
那么,如何直接在代码中水平或沿 x 轴翻转纹理? (不使用图像编辑器)
【问题讨论】:
标签: javascript three.js
我正在制作 360 度查看器,因此纹理位于圆柱体内。问题是它们看起来是水平倒置的。
我知道texture.flipY,但我没有在the source 上找到texture.flipX。
那么,如何直接在代码中水平或沿 x 轴翻转纹理? (不使用图像编辑器)
【问题讨论】:
标签: javascript three.js
要水平翻转纹理,您可以执行以下操作:
texture.wrapS = THREE.RepeatWrapping;
texture.repeat.x = - 1;
如 cmets 中所述,这种方法要求纹理的大小是 2 的幂次方。
three.js r.87
【讨论】:
RepeatWrapping 在 iOS safari 上会失败
答案比我想象的要容易。
cylinder.scale.x = -1;
别忘了添加
material.side = THREE.DoubleSide;
【讨论】:
这似乎有点矫枉过正,但我认为一个不错的方法是将它围绕它的中心旋转 180 度(PI 弧度)然后翻转它:
texture.center = new THREE.Vector2(0.5, 0.5);
texture.rotation = Math.PI;
texture.flipY = false;
【讨论】:
这里的另一种方法是更改几何形状。在圆柱几何体中,您为要渲染的圆柱部分指定thetaStart 和thetaLength,通常您选择一个正角度,即thetaLength>0。相反,如果您将thetaStart + thetaLength 和-thetaLength 传递给CylinderBufferGeometry,则圆柱体呈现顺时针而不是逆时针,并且所有面法线现在都指向内。所以,不需要再翻转纹理了。
【讨论】: