2012-06-26 5 views
0
float pts[N][4]={{x1,y1,z1,v1},{x2,y2,z2,v2},...,{xN,yN,zN,vN}}; 
//in viewsight(0,0)-(w,h); 
//N==w*h 
//if pts[n][3]==0 then pts[n] is invalid 

Как оценить нормальные векторы для каждого действительного pts?Как получить нормальные векторы для каждого действительного pts?

Очки - это точки в данных облачных облаков и видны в виде, имеющем размер (w, h);

что-то вроде этого:

p11,p12,p13...p1w, 
p21,p22,p23...p2w, 
... 
... 
ph1,ph2,ph3...phw, 

Каждая точка их ассоциированные соседей, и создать поверхность вместе с нами.

Штаммы плотно расположены один за другим, ряды и столбцы. И задача нас - найти способ как можно точнее оценить нормальный вектор каждой точки по отношению к нашей точке зрения.

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

+0

Что вы подразумеваете под pts? –

+0

Нормальный для чего? – nhahtdh

+0

Очки - это точки в данных облачных облаков и видны в виде, имеющем размер (w, h); – user1468756

ответ

1

Как правило, нормаль для вершины на поверхности вычисляется как среднее из нормальных векторов смежных многоугольников. См: http://www.opengl-redbook.com/appendices/AppH.pdf

В этом случае, для вершины р55 со следующими соседями:

p44 p45 p46 
p54 p55 p56 
p64 p65 p66 

вы могли бы найти нормали для каждого из треугольников,

n1 = (p55 - p44) x (p55 - p45) 
n2 = (p55 - p45) x (p55 - p46) 
... 

удостоверяясь, чтобы сохранить ориентацию векторов, так что все нормали указывают в одном направлении (в сторону зрителя). Оттуда вам просто нужно нормализовать все векторы, а затем принять их среднее значение.

+0

Спасибо. Принимает среднее значение: (n1 + n2 + ... + nN)/N? к точкам p55? Кстати, если есть тысячи очков, как ускорить? – user1468756

+0

Как я понял вопрос, он просто принимал среднее значение нормалей для 8 смежных треугольников. Это неверно? – beaker

+0

Некоторые пункты недействительны (не отображаются в представлении).Например, p44 p66, p56 недопустимы, и есть только p45 p46 p54 p64 p65 вокруг p55 – user1468756

0

Невозможно оценить нормальный вектор для точки. Точка не может иметь нормальный вектор. Самолет может.

+0

Это не точка, а точки в данных облака точек и видны в виде, имеющем размер (w, h). Я нашел несколько статей о том, как их оценивать, но трудно понять. – user1468756

+0

Просто относитесь к ним как к поверхности – user1468756

+0

Вам нужно как минимум три очка, чтобы лечить их, как поверхность –