【问题标题】:How to texture a three.js Mesh created with ShapeGeometry如何对使用 ShapeGeometry 创建的 three.js 网格进行纹理处理
【发布时间】:2013-10-11 12:22:08
【问题描述】:

我正在尝试将位图纹理材质放置在从 three.js ShapeGeometry 创建的网格上。

几何是一个简单的八边形(我最终会添加曲线使其成为圆角矩形)。

Mesh 创建并显示得很好,除了位图纹理显示为四个巨大的正方形,这似乎是加载图像的超级低分辨率版本。

如下所示:

(加载的图片实际上是一张512x512的法国国旗图片)

如何让纹理使用加载图像的全分辨率? (顺便说一句,这种纹理在作为材质应用到由 THREE.PlaneGeometry 制成的网格时效果很好。)

这是我的代码...

var shape = new THREE.Shape();
shape.moveTo(-width/2 + radius, height/2);
shape.lineTo(width/2 - radius, height/2);
shape.lineTo(width/2, height/2 - radius);
shape.lineTo(width/2, -height/2 + radius);
shape.lineTo(width/2 - radius, -height/2);
shape.lineTo(-width/2 + radius, -height/2);
shape.lineTo(-width/2, -height/2 + radius);
shape.lineTo(-width/2, height/2 - radius);
shape.lineTo(-width/2 + radius, height/2);
var myGeometry = new THREE.ShapeGeometry( shape );

var myMesh = new THREE.Mesh(myGeometry, myMaterial);

谢谢!!!

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    THREE.ExtrudeGeometry.WorldUVGeneratorTHREE.ShapeGeometry 的默认 UV 生成器。

    此默认 UV 生成器将 UV 设置为等于顶点坐标。

    您需要将自己的 UV 发生器传递给THREE.ShapeGeometry。请参阅源代码以了解其工作原理。

    一种解决方法是将模型参数按比例放大 10 倍,然后通过设置 mesh.scale.set( 0.1, 0.1, 1 ) 进行补偿。

    第三个选项是调整您的几何形状,使其顶点覆盖 [0, 1] 范围 - 然后根据需要应用 mesh.scale

    three.js r.61

    【讨论】:

    • 我知道这与 UV 有关系,但无法理解。谢谢!我想我现在可以让它工作了。
    • 现在工作得很好!我选择了 2 号门后面的选项 :)
    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 2021-08-18
    • 2014-12-19
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多