Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 26/08/2013 at 10:03, xxxxxxxx wrote:
Hi,
is there by any chance a function that will return the Point Normal, given a Point Object and a point id? Basically like the xpresso Point node...
Cheers Michael
On 26/08/2013 at 10:31, xxxxxxxx wrote:
There is no built-in method. You can calculate the vertex normal by taking the average of the normal of all adjacent polygons. A vertex without adjacent polygons does simply not have a normal.
Cheers, -Niklas
On 26/08/2013 at 10:35, xxxxxxxx wrote:
There isn't even really a method to calculate polygon normals. There is PolygonObject. CreatePhongNormals(), but it does require a (already cached / executed) phong tag. Calculating the normals yourself might be the fastest way, simply calculate all polygon normals for the mesh.
> normallist[polyindex] = ((poly.VecB - poly.VecA) % (poly.VecC -poly.VecA)).GetNormalized()
Then calculate the point normal for each point.
> pnormal = Vector() > > cnt = 0 > > for each polygon attached to point: > > pnormal += normallist[polygon] > > cnt += 1 > > pnormal *= (1.0/cnt)
edit : nikklas was faster and FYI, the example is meant for triangles of course, for quads or mixed meshes you have to extend the polygon normal calculation for nonplanar quads to the fourth point.
On 26/08/2013 at 10:56, xxxxxxxx wrote:
Originally posted by xxxxxxxx [...] FYI, the example is meant for triangles of course, for quads or mixed meshes you have to extend the polygon normal calculation for nonplanar quads to the fourth point.
Originally posted by xxxxxxxx
[...] FYI, the example is meant for triangles of course, for quads or mixed meshes you have to extend the polygon normal calculation for nonplanar quads to the fourth point.
You actually only have to replace the C in your calculation with the D and don't take C into account at all.
points = op.GetAllPoints() polygons = op.GetAllPolygons() normals = []
for p in polygons: a = points[p.a] b = points[p.b] c = points[p.c] d = points[p.d]
n = (b - a).Cross(d - a).GetNormalized() normals.append(n)
The value of D == C for a triangle, therefore the calculation is valid for triangles and quads and you do not have to distinguish them explicitly.
On 27/08/2013 at 01:13, xxxxxxxx wrote:
You actually only have to replace the C in your calculation with the D and don't take C into account at all. points = op.GetAllPoints() polygons = op.GetAllPolygons() normals = [] for p in polygons: a = points[p.a] b = points[p.b] c = points[p.c] d = points[p.d] n = (b - a).Cross(d - a).GetNormalized() normals.append(n) The value of D == C for a triangle, therefore the calculation is valid for triangles and quads and you do not have to distinguish them explicitly. Cheers, -Niklas
Thanks guys! I'll give it a go right away...