Пересчитать нормаль на редактируемом поли-объекте - PullRequest
2 голосов
/ 12 ноября 2010

Я работаю над экспортером, но проблема в том, что я застрял в нормальном расчете.

Я читал много сообщений об этом, и похоже, что функция "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 Ответ

1 голос
/ 16 ноября 2010

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

--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
...