【问题标题】:I need to repeat a texture depending on unique object sizes我需要根据独特的对象大小重复纹理
【发布时间】:2018-09-26 08:46:16
【问题描述】:

让我解释一下。

我需要处理多个纹理,我知道该怎么做,或者更确切地说在做的时候使用哪种方法。

解决方案是对几何图形进行 UV 映射以重复纹理。

问题是我不知道该怎么做,THREE.js 中关于 UV 映射的文档对我来说超级复杂。

假设我有三个具有相同纹理的不同对象。这些是尺寸:

(1,1,1) - 我需要这个来拥有一个 2x2 的 UV 网格。 AKA 4 在每个面上重复。 (1,2,1) - 我需要这个在侧面有一个 2x4 的 UV 网格,而不是顶部或底部。 (3,1,3) - 我需要这个在顶部和底部有一个 6x6 的 UV 网格,但不是侧面。

我将如何不加载 3 个不同的纹理克隆,并在每个特定几何体上使用 UV 贴图根据其各自的大小重复纹理?

编辑:我已经设置了 boxbuffergeometry 的段,但是纹理不会根据 uvs 重复。现在这是一个非常烦人的问题。我需要在几何体中设置纹理重复/段/uvs。

【问题讨论】:

  • 我认为您的问题以及上一个问题对于 Stack Overflow 格式来说可能过于开放......考虑discourse.threejs.org。使用 UV 通常在建模工具中完成,并将结果导出到诸如three.js 之类的引擎中。您可以缩放 UV 以强制纹理针对不同的几何形状以不同的方式重复,但可能需要大量代码才能获得与建模工具相同的结果...
  • 也许我应该在我的下一个问题中考虑这个问题,我不知道 discourse.threejs.org,我会保留它的书签,感谢您的提醒。我还在使用 Blender 来制作更复杂的几何图形,但是因为它是一个原始的立方体几何图形,我想在上面进行测试,所以 Blender 会有点过分,因为我在 Blender 中没有过多地使用 UV。

标签: javascript three.js


【解决方案1】:

假设您使用某种 BufferGeometry,UV 可以按如下方式缩放。将 UV 缩放 2 倍会导致纹理被平铺两次。

var uvs = mesh.geometry.attributes.uv;

for ( var i = 0; i < uvs.count; i++ ) {

  uvs.setXY( i, uvs.getX( i ) * 2, uvs.getY( i ) * 2 );

}

完成此操作后,您可以安全地合并共享材质的几何图形,即使纹理重复的次数不同。

请参阅https://threejs.org/docs/#api/en/core/BufferAttribute,从 three.js r96 开始。

【讨论】:

  • 溢出的你们真的知道自己在做什么!太棒了!谢谢!我现在要把它变成一个函数..
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
相关资源
最近更新 更多