如何纹理使用ShapeGeometry创建的three.js网格

时间:2013-10-04 13:21:26

标签: javascript three.js

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

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

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

以下是它的样子:http://imgur.com/KYFVGAn

(加载的图像实际上是法国国旗的512x512 pic)

如何让纹理使用加载图像的完整分辨率? (顺便说一下,当这个纹理作为材质应用于由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);

感谢!!!

1 个答案:

答案 0 :(得分:2)

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