如何获得每个有效pts的法向量?

时间:2012-06-26 06:41:47

标签: algorithm math rendering hpc voxel

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是Point-cloud-data中的点,可以在(w,h)中的视图中看到;

类似的东西:

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

每个点都被他们的邻居联系起来,并一起为我们生成一个表面。

pts一个接一个地排列成行和列。我们的任务是找到一种方法来尽可能准确地评估每个点的法线向量。

我正在尝试实时做这件事,因为pts是实时生成的。例如,一次计数1024x1024点。是否有人先发布过决议?

2 个答案:

答案 0 :(得分:1)

通常,表面上顶点的法线计算为相邻多边形的法向矢量的平均值。请参阅:http://www.opengl-redbook.com/appendices/AppH.pdf

在这种情况下,对于具有以下邻居的顶点p55:

p44 p45 p46
p54 p55 p56
p64 p65 p66

你可以找到每个三角形的法线

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

确保保持向量的方向,以便所有法线指向相同的方向(朝向观察者)。从那里你只需要对所有向量进行标准化,然后取其平均值。

答案 1 :(得分:0)

无法评估点的法向量。一个点不能具有法向量。飞机可以。