2013-07-08 45 views
4

我在Three.js(FPS-like)中构建了一个相当复杂的3D环境。为了这个目的,我想以一种面向对象的方式构造纹理和材质的加载。例如; materials.wood.brownplank是一种具有某种纹理和其他属性的可重复使用的材料。以下是模型使用材质和材质使用纹理的过程的简化可视化。在Three.js中修复了纹理尺寸

loadTextures(); 
loadMaterials(); 
loadModels(); 

//start doing stuff in the scene 

我想在不同大小的物体上使用该材质。但是,在Three.js中,您不能(AFAIK)设置一定的纹理比例。您将不得不设置重复按比例缩放它以适应您的对象。但我不想为每个我使用的物体的每一架飞机做到这一点。

Here is how it looks now

正如你所看到的,纹理大小不均匀。

有没有简单的方法来实现这一目标?因此,每次克隆纹理和/或材料并根据几何设置重复设置将不会执行:)

我希望有人能帮助我。

结论:

有没有真正简单的方法来做到这一点。我最终改变了我的加载方法,例如materials.wood.brownplank现在例如getMaterial('wood', 'brownplank')在函数中新对象被实例化

回答

0

您应该可以通过根据每个“真实”尺寸面对。

在Three.js中,无论纹理或面的实际大小如何,UV坐标都是相对于面部和纹理(如0.0,一个边,1.0 =其他边)。但是通过修改几何图形中的UV(将它们乘以基于面部实体大小的某个因子),可以对每个面使用不同大小(和方向)的相同材质和纹理。

你只需要弄清楚UV,几何尺度和你想要的工作单位(如mm或m)之间的映射。对不起,我没有,或知道现成的算法来做到这一点,但这是你可能需要采取的方法。一点实验和google-fu应该是相当可行的。

+0

纠正我,如果我错了;但不是用于设置偏移量的UV坐标,而不是比例尺? –

+0

@claarman。虽然我对UV不太好,但我确信你错了:)我只是为另一种几何格式写了一个Three.js导入程序,并且错误地转换了UV坐标导致了错误的比例。所以是的,它们会影响比例尺,偏移量和方向。 – yaku

+0

好的,那么我会尝试你的方法;) –