【发布时间】:2017-03-26 10:54:48
【问题描述】:
我正在尝试将纹理应用于 three.js r67 中的 ringGeometry。我无法正确定位纹理。我想将以下纹理径向应用于 ringGeometry 网格,使纹理的蓝色端出现在环的内圆周上,红色端出现在外圆周上。这是我的代码的相关部分,其中包含指向运行示例的 JSFiddle 链接:
geometry = new THREE.RingGeometry(100, 192, 60);
material = new THREE.MeshPhongMaterial({ map: texture });
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
http://jsfiddle.net/mareid/8t4cz/4/
我无法让纹理 (a) 径向流动,(b) 与环的径向范围对齐,从而显示整个纹理,以及 (c) 出现在环的两侧。我希望它看起来更像这样:
http://astro.utoronto.ca/~mreid/ring_gradient.png
我对 UV 映射的掌握非常不稳定。请注意,我提供的纹理只是一个示例。我希望能够在环上的径向纹理的一般情况下做到这一点。
其他人发布了类似的问题,但我不知道如何将他们的示例中的 UV 映射调整为我的示例:
Non-radial texture mapping over a ring geometry in WebGL using Three.js
感谢您的帮助!
【问题讨论】:
-
你会考虑使用类似于
ring_gradient.png的东西作为你的纹理吗? -
我会说您链接的答案中的代码具有您正在寻找的确切答案,无需调整代码。我错过了什么吗?
-
@vals,我尝试使用该链接中的代码更改 uv 映射。它将纹理定向在正确的方向(即径向),但实际上只有一小部分纹理映射到环上。也就是说,如果我要使纹理具有五个彩色带(比如红色、橙色、黄色、绿色、蓝色),结果是红色和橙色的同心圆,但没有黄色、绿色或蓝色。我不知道如何让纹理的其余部分显示出来。就像 10% 的纹理映射到环的径向范围的 100%,而不是 100% 到 100%。
-
@vals 我已经实现了您的解决方案,但您可以看到它并不完全有效:link 尝试更改以下行中的最后两个数字,您会看到一些奇怪的行为几何和纹理。就好像它自我遮蔽了自己一样。很奇怪。我认为只有当 thetaSegments=phiSegments 时,你才能获得完整的纹理,即便如此,环上也会有一个有趣的自身阴影。
-
这不是我的解决方案 :-) 反正我觉得代码有点不对,应该是 uvs.push( new THREE.Vector2( i/(thetaSegments-1), o/ (phiSegments-1) ) );
标签: javascript three.js texture-mapping