three.js - 带有aoMap和第二个UV坐标的缓冲几何体

4
我正在使用一个以BufferGeometry形式加载的SEA3D模型,并通过外部添加aoMap。然而,两个贴图都存在问题:
- aoMap没有影响模型的颜色。
在three.js文档中指出,aoMap需要第二组UV信息。在BufferGeometry中,我知道UV信息在geometry.attributes.uv中。
请问如何获取第二组UV信息,以便使用aoMap?
谢谢。

你可以像这样向 BufferGeometry 添加第二组 UV:var uvs = geometry.attributes.uv.array; geometry.addAttribute( 'uv2', new THREE.BufferAttribute( uvs, 2 ) ); 试一下并重新发布你的问题。 - WestLangley
谢谢@WestLangley。我添加了它,但是激活aoMap后仍然没有结果。不过lightMap似乎可以工作。 有任何想法吗? 我可以添加开发版本的链接。 - Rui d'Orey
搞定了,搞定了,我需要更新缓存...非常感谢@WestLangley。我修改了问题,如果你想添加你的答案,我会投票认为是正确的。 - Rui d'Orey
3个回答

9
您可以像这样向BufferGeometry添加第二组UV:
var uvs = geometry.attributes.uv.array;
geometry.addAttribute( 'uv2', new THREE.BufferAttribute( uvs, 2 ) );

(当然,使用这种模式,第二组将匹配第一组。)
three.js r.74

3

我目前使用的是r89版本,似乎上面的代码已经不再适用了。我访问了three.js文档页面,并发现您无需复制数组并创建BufferAttribute对象的新实例,只需使用BufferAttribute对象的copy方法即可。

这对我有用。

geometry.attributes.uv2 = geometry.attributes.uv.clone()

与之前的回答类似,你最终将得到两个相同的UV集合。


5
接受的答案对我有用。在你的答案中,只需要这样做即可:geometry.attributes.uv2 = geometry.attributes.uv; - WestLangley

0

还有一种方法可以将纹理分配给UV2

//                map|aoMap|normalMap|metalnessMap|roughnessMap|alphaMap etc...
object3d.material.map.channel = 2;
object3d.material.needsUpdate = true;

致敬

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