- Home /
Question by
7toni7 · Aug 12, 2014 at 09:39 AM ·
meshverticescoordinates
How to obtain the world space coordinates for each individual vertex on a Mesh?
Hi all,
I'd like to know how to obtain the world space coordinates for each individual vertex on a Mesh, which has been previously loaded and assigned to a Gameobject. My code is:
public class ComputeAngles : MonoBehaviour {
Mesh _malla;
GameObject _67P_3Dobject;
Material _67P_material;
Vector3 _sunPosition = new Vector3(0.0f,0.0f,0.0f);
Vector3 _67PPosition = new Vector3(0.0f,0.0f,0.0f);
float scale = 10.0f;
int j;
void Start(){
//Load mesh and material
_malla = Resources.Load("Meshes/tube",typeof(Mesh)) as Mesh;
_67P_material = Resources.Load("Meshes/Materials/No Name",typeof(Material)) as Material;
//A gameobject is created and the mesh is assigned to it
_67P_3Dobject = new GameObject("67P");
_67P_3Dobject.AddComponent<MeshFilter>();
_67P_3Dobject.AddComponent<MeshCollider>();
_67P_3Dobject.GetComponent<MeshFilter>().mesh = _malla;
_67P_3Dobject.AddComponent<MeshRenderer>();
_67P_3Dobject.transform.position = _67PPosition;
_67P_3Dobject.transform.localScale = new Vector3(scale,scale,scale);
Renderer renderer = _67P_3Dobject.GetComponent<MeshRenderer>().renderer;
renderer.material = _67P_material;
//We print the number of vertices and facets of the mesh
print("Number of vertices = "+_malla.vertexCount);
print("Number of facets = "+_malla.triangles.Length/3);
//We print the world coordinates of each vertex in the mesh
Mesh mesh_runtime = _67P_3Dobject.GetComponent<MeshFilter>().mesh;
Vector3[] verteces = mesh_runtime.vertices;
foreach (Vector3 vertex in verteces) {
print(transform.TransformPoint(vertex));
}
}}
However, it seems like the coordinates of the vertices are wrong, since they do not correspond to the bounds of the mesh in the space.
Please, let me know, I'm completely mad about this issue. Kind regards
Comment
Answer by dsada · Aug 12, 2014 at 10:07 AM
The problem is that you are getting the vertices in local space not in world space. there is an easy projection from local to world by calling this function for every vertex:
Transform tr = _67P_3Dobject.transform;
for(int i = 0 i < verteces.Length; ++i)
{
verteces[i] = tr.TransformPoint(verteces[i]);
}