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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}