Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Нахождение нормали вершины


Автор: antoniobanderas 4.10.2006, 17:40
Люди правильно ли я нахожу нормали
вот код:
Код

procedure Mesh.CalcNormals;
var
  i:int;
begin
  for i:=1 to NumVertex
  do begin
       Vertices[i].Normal.x:=0;
       Vertices[i].Normal.y:=0;
       Vertices[i].Normal.z:=0;
     end;

  for i:=1 to NumFace
  do Faces[i].CalcNormal;

  for i:=1 to NumFace
  do begin
       Faces[i].v1^.Normal.x+:=Faces[i].Normal.x;
       Faces[i].v1^.Normal.y+:=Faces[i].Normal.y;
       Faces[i].v1^.Normal.z+:=Faces[i].Normal.z;
       Faces[i].v2^.Normal.x+:=Faces[i].Normal.x;
       Faces[i].v2^.Normal.y+:=Faces[i].Normal.y;
       Faces[i].v2^.Normal.z+:=Faces[i].Normal.z;
       Faces[i].v3^.Normal.x+:=Faces[i].Normal.x;
       Faces[i].v3^.Normal.y+:=Faces[i].Normal.y;
       Faces[i].v3^.Normal.z+:=Faces[i].Normal.z;

       Faces[i].v1^.TransformedNormal.x:=Faces[i].v1^.Normal.x;
       Faces[i].v1^.TransformedNormal.y:=Faces[i].v1^.Normal.y;
       Faces[i].v1^.TransformedNormal.z:=Faces[i].v1^.Normal.z;
       Faces[i].v2^.TransformedNormal.x:=Faces[i].v2^.Normal.x;
       Faces[i].v2^.TransformedNormal.y:=Faces[i].v2^.Normal.y;
       Faces[i].v2^.TransformedNormal.z:=Faces[i].v2^.Normal.z;
       Faces[i].v3^.TransformedNormal.x:=Faces[i].v3^.Normal.x;
       Faces[i].v3^.TransformedNormal.y:=Faces[i].v3^.Normal.y;
       Faces[i].v3^.TransformedNormal.z:=Faces[i].v3^.Normal.z;
     end;

end;


И еще дайте пожалуйста процедуру гуро закраски а то моя че-то нетак работает а в нете все на ассемблере
заранее спасибо

Автор: maxim1000 4.10.2006, 17:47
а что подразумевается под нормалью вершины?

P.S.
Цитата(antoniobanderas @  4.10.2006,  16:40 Найти цитируемый пост)
И еще дайте пожалуйста процедуру гуро закраски а то моя че-то нетак работает а в нете все на ассемблере
заранее спасибо

для этого лучше создать отдельную тему, чтобы не смешивать разные обсуждения...

Автор: antoniobanderas 4.10.2006, 17:59
Цитата

а что подразумевается под нормалью вершины?

нормаль вершины это вектор направленный из вершины но он не обязательно паралельный нормали грани
Цитата

для этого лучше создать отдельную тему, чтобы не смешивать разные обсуждения... 


ок

Автор: Sartorius 4.10.2006, 18:06
Цитата


нормаль вершины это вектор направленный из вершины но он не обязательно паралельный нормали грани



 Если честно, то ничего не понятно. Это не определиние... Напиши подробней, а то у тебя получается любой вектор из вершины - это нормаль smile 

Автор: maxim1000 4.10.2006, 18:12
насколько я понял из кода, нормаль вершины считается, как среднее нормалей примыкающих граней
однако, ещё нужно разобраться с направлением них нормалей (у нормали грани может быть два противоположных направления), т.к. разный их выбор может дать совсем разные направления (даже не колинеарные)

Автор: antoniobanderas 4.10.2006, 18:15
есть допустив две смежных грани, у них есть две нормали нормали грани, возьмем вершину котороя принадлежит обоим граням, нормаль вершины находится как сумма нормалей всех граней которым она принадлежит
это нужно для гуро закраски

Добавлено @ 18:18 
направление определяется порядком указания вершин
а нормаль грани находится как векторное произведение двух векторов лежащих в плоскости грани

Автор: maxim1000 4.10.2006, 18:23
ну тогда похоже на правду...
но опять же, вершины для каждой грани должны быть перечислены так, чтобы ориентация была согласована (т.е. не было части нормалей в одну сторону, части в другую)...

Автор: antoniobanderas 4.10.2006, 18:40
все согласовано  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)