You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/sample/CalUV.ts

42 lines
1.3 KiB

function updateUV(geometry)
{
// 据我所知没有自动计算UV的方法。
// 你必须计算自己。计算一个平面的紫外线是相当容易的,这个网站解释如何:计算纹理坐标
// 对于一个复杂的形状,我不知道如何。也许你可以检测平面。
// 编辑
// 这是一个平面表面的示例代码,(x, y, z)其中z = 0
geometry.computeBoundingBox();
var max = geometry.boundingBox.max,
min = geometry.boundingBox.min;
var offset = new THREE.Vector2(0 - min.x, 0 - min.y);
var range = new THREE.Vector2(max.x - min.x, max.y - min.y);
var faces = geometry.faces;
if (!geometry.faceVertexUvs)
{
geometry.faceVertexUvs = [[]];
}
geometry.faceVertexUvs[0] = [];
for (var i = 0; i < faces.length; i++)
{
var v1 = geometry.vertices[faces[i].a],
v2 = geometry.vertices[faces[i].b],
v3 = geometry.vertices[faces[i].c];
geometry.faceVertexUvs[0].push([
new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y),
new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y),
new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y)
]);
}
geometry.uvsNeedUpdate = true;
}