Тебе сегодня везет , откопал скриптик у себя в архивах, когдато писал на эту тему:
Copy Map to Dest
Скрипт копирует исправленную карту текстурных координат UV Map
на объект отличающийся индексацией вершин, но со сходной топологией,
одинаковым числом вершин и совпадающими локальными координатами вершин.
Замечание: Не допускаются такие ошибки как расположенные в одном и том же
месте вертексы или слишком близко расположенные точки.
Код:
-- Copy Map to Dest.ms
-- Create:
-- By Denis Savin (denis_savin@mail.ru)
-- v 1.00
threshold = 0.001
Obj_Source = $Object01
Obj_Dest = $Object02
num_verts = Obj_Source.numverts
num_faces = Obj_Source.numfaces
tvnum = Obj_Source.numtverts
vertToDest = #()
-- Search reference index array source Vert to Dest Verts
for i = 1 to num_verts do
(
local p_src
in coordsys local p_src = getVert Obj_Source i
local fStop = true
for j = 1 to num_verts while fStop do
(
local p_dst
in coordsys local p_dst = getVert Obj_Dest j
local d = distance p_src p_dst
if d < threshold then (fStop = false; append vertToDest j)
)
if fStop do format "Error: Not Foind for Source Vertex:% Equivalent Destination Vertex !\n" i
)
fn getFaceFrom3Verts obj verts = (
local a1 = meshop.getFacesUsingVert obj verts[1]
local a2 = meshop.getFacesUsingVert obj verts[2]
local a3 = meshop.getFacesUsingVert obj verts[3]
local r = (a1 * a2 *a3)
if r.numberset != 1 do (
format "Error: fn getFaceFrom3Verts !\n"
format "verts:%\n a1:% a2:% a3:% r:%\n" verts a1 a2 a3 r
select obj.verts[#{verts[1],verts[2],verts[3]}]
subobjectLevel = 1
update obj
)
(r as array)[1]
)
fn point3ToDest p = [vertToDest[p.x],vertToDest[p.y],vertToDest[p.z]]
------------------
-- Copy Texture Coord
setNumTVerts Obj_Dest tvnum
for j= 1 to tvnum do
(
local t = getTVert Obj_Source j
setTVert Obj_Dest j t
)
------------------
-- Copy Texture Face Index
for i = 1 to num_faces do
(
local sFace = getFace Obj_Source i
--local t = getTVert mObj j
local sMatid = getTVFace Obj_Source i
local dFace = point3ToDest sFace
local dFaceNum = getFaceFrom3Verts Obj_Dest dFace
setTVFace Obj_Dest dFaceNum sMatid
)
update Obj_Dest