Javascript 使用平面几何体具有多个纹理的Three.js平铺
所以我正在尝试建立一个由瓷砖组成的基于3D的世界 我已经成功地使用平面几何和高度值等来实现这一点,但现在我已经到了一个可能需要改变一切的地步 问题是我希望平铺具有多个纹理(使用着色器是因为我想混合它们)。我能够在全局范围内完成这项工作(因此每个瓷砖都有相同的纹理+使用一些uv贴图) 但是,我无法理解如何指定哪个平铺具有哪些纹理(我有大约100个纹理),因为平面几何体只有1个着色器材质。我也不确定通过着色器发送100个纹理是否是个好主意 所以我的问题基本上可以归结为: 有没有合适的/性能良好的方法将平铺/顶点链接到纹理,这样我就可以保留平面几何体 -如果是:如何 -如果否:是否应分别创建每个平铺(因此为1x1平面)并以某种方式将它们合并在一起(性能/顶点混合?),使其充当单个平面(在本例中,合并的平面由多个1x1平面组成)并使用每个平铺的着色器(1x1平面) 这些事情通常是怎么做的 编辑: 一些额外的信息,因为我的问题似乎不太清楚: 我想要的是,一块瓷砖(两个面)有多个“材质索引”可以这么说。目前,我需要有1个平铺才能有3个纹理,所以我可以在着色器中使用特定算法混合它们Javascript 使用平面几何体具有多个纹理的Three.js平铺,javascript,three.js,textures,tile,Javascript,Three.js,Textures,Tile,所以我正在尝试建立一个由瓷砖组成的基于3D的世界 我已经成功地使用平面几何和高度值等来实现这一点,但现在我已经到了一个可能需要改变一切的地步 问题是我希望平铺具有多个纹理(使用着色器是因为我想混合它们)。我能够在全局范围内完成这项工作(因此每个瓷砖都有相同的纹理+使用一些uv贴图) 但是,我无法理解如何指定哪个平铺具有哪些纹理(我有大约100个纹理),因为平面几何体只有1个着色器材质。我也不确定通过着色器发送100个纹理是否是个好主意 所以我的问题基本上可以归结为: 有没有合适的/性能良好的方法
例如,我想要一个心形(红色心形/黑色背景)作为纹理,而不是基于我想要混合/更改其他两种纹理的颜色,这样我可以得到例如木制心形和蓝色背景。例如,我应该能够在正方形上均匀混合4种纹理,每种纹理取正方形的1/4。但这里的重点不是如何处理纹理,而是如何为我的面/瓷砖指定这样的3、4或更多纹理。我想你必须看看所谓的多材质对象
THREE.SceneUtils.createMultiMaterialObject( geometry, materials );
如果你在谷歌上搜索这些,你会发现几个例子。喜欢
或者看看。可以使用它为同一几何图形指定多个材质
var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
其中材质是一组材质,面使用materialIndex
参数指定正确的材质
类似的问题和建议
编辑:
证明这是可能的。我使用了其中一个链接中的代码。如果纹理大小相同,可以执行以下操作:
我认为它们都帮不了我。我需要知道的是,我如何才能说哪个瓷砖在64*64瓷砖的平面上有哪些纹理。所以我只有一个着色器需要传递属性?告诉着色器哪些瓷砖/顶点有哪些纹理,但我不知道如何做,或者这是否可能。也许我需要拆分t他在多架1x1飞机上驾驶飞机?@captain显然,我添加了一把小提琴来向您展示这是可能的。您必须使用
materialIndex
属性来指定您脸上的材质。您好,谢谢您的努力,尽管我认为您没有正确理解我。我想要的是一块瓷砖(2面)有多个MaterialIndex可以这么说。目前我需要1个平铺才能有3个纹理,这样我就可以用特定的算法将它们混合到着色器中。例如,我想要一个心形(红色心形/黑色背景)作为纹理,而不是基于它的颜色,我想混合/更改其他2种纹理,以便获得例如木心和蓝色背景。或者,例如,我应该能够在正方形上均匀混合4种纹理,每种纹理取正方形的1/4。但这里的重点不是如何处理纹理,而是如何指定这样的3,4,。。无论我的面/瓷砖的纹理是什么,谢谢。这将是一个好主意,因此我不必向着色器发送100个纹理。但是,我仍然需要知道哪些面/顶点/xy具有哪些纹理…:)因为您只需要3个纹理,一个可行的解决方案是使用面颜色,然后使用r分量对第一个纹理进行编码,g分量对第二个纹理进行编码,b分量对第三个纹理进行编码,这是一种选择,但这似乎是一种技巧,而不是一般的方法:)