2010-11-12 4 views
2

Я работаю над экспортером, но проблема, за которую я застрял, - это обычный расчет.Пересчитать нормаль на редактируемый поли объект

Я читал много сообщений об этом, и кажется, что функция «getnormal» не работает, как предполагалось. (это тот, который создает неправильные результаты для моего экспортера).

Так что мне нужно пересчитать его вручную.

Вопрос в том, как это сделать? часть, которая вычисляет нормаль, теперь выглядит следующим образом:

Если вы предоставляете функцию, пожалуйста, имейте в виду этот код ниже, я бы не хотел переписывать все.

благодарит заранее.

for i = 1 to num_faces do 
    (
    face = getFace Obj i 

    v1 = (MeshArrays[2].count + 1) 
    v2 = (MeshArrays[2].count + 2) 
    v3 = (MeshArrays[2].count + 3) 

    append MeshArrays[1] [v1,v2,v3] 

    v1 = coordsys world getvert Obj face.x 
    v2 = coordsys world getvert Obj face.y 
    v3 = coordsys world getvert Obj face.z 


    append MeshArrays[2] v1 
    append MeshArrays[2] v2 
    append MeshArrays[2] v3 

    v1 = (coordsys local getnormal Obj face.x) -- * theInvTM 
    v2 = (coordsys local getnormal Obj face.y) --* theInvTM 
    v3 = (coordsys local getnormal Obj face.z) --* theInvTM 

    append MeshArrays[4] v1 
    append MeshArrays[4] v2 
    append MeshArrays[4] v3 

    if Obj.numtverts != 0 then 
    ( 
     tvface = getTVFace Obj i 
     v1 = getTVert Obj tvface.x 
     v2 = getTVert Obj tvface.y 
     v3 = getTVert Obj tvface.z 
     append MeshArrays[3] v1 
     append MeshArrays[3] v2 
     append MeshArrays[3] v3 
    ) 


    ) 

ответ

1

решить, заменив соответствующие строки со следующим кодом:

--get the object's transformation 
myTransform = Obj.transform 

-- get the normal * transformation - translation 
v1 = (coordsys local getnormal Obj face.x)* myTransform - (myTransform.translationpart) 
v2 = (coordsys local getnormal Obj face.y)* myTransform - (myTransform.translationpart) 
v3 = (coordsys local getnormal Obj face.z) * myTransform - (myTransform.translationpart) 

--normalize them/and write normal to a new variable 
v11 = normalize v1 
v22 = normalize v2 
v33 = normalize v3 

--append to array 
append MeshArrays[4] v11 
append MeshArrays[4] v22 
append MeshArrays[4] v33