- Home /
Direction of a mesh
Hello,
I got a cube and want to create a script that changes vertices in relation to their position. So for example I want to on the top of a cube change a vert += Vector3(0,1,0); That will let the vert go higher. But if I do the same script on the "right" or "left" side of the cube, the vertice should move along +x or -x , not y axis. So how I can find out at which direction one side of a cube is "looking"? Thanks in advance :)
transform.forward | up | right
-transform.forward | up | right
Answer by Berenger · Feb 23, 2012 at 12:46 AM
for(int i = 0, n = 0; i < mesh.triangles; i += 3, n++){
Vector3 normal = mesh.normal[n];
Vector3 p1 = mesh.vertices[ mesh.triangles[i] ];
Vector3 p2 = mesh.vertices[ mesh.triangles[i+1] ];
Vector3 p3 = mesh.vertices[ mesh.triangles[i+2] ];
// Do your business here
}
That code isn't tested.
Note that mesh normals are for lighting, so you can't rely on them to be useful for this. Particularly for smoothed surfaces, they will not be pointing in the same direction as the surface normal.
Answer by Eric5h5 · Feb 23, 2012 at 03:05 AM
You can get the surface normal of a triangle like this:
var v0 = vertices[0];
var v1 = vertices[1];
var v2 = vertices[2];
var surfaceNormal = Vector3.Cross (v1 - v0, v2 - v0).normalized;
vertices[0], [1], and [2] should, of course, be replaced with the actual vertices of the triangle that you're interested in.
Your answer
Follow this Question
Related Questions
Highmap on a cube. 0 Answers
Custom Mesh UV Problem 1 Answer
Simple plane generation 1 Answer
reading vertices from a mesh always returns Vector3.zero 2 Answers
Deleting/restoring mesh vertices 3 Answers