- Home /
mesh.CombineMeshes causes mesh not to render
Hello I made a function
Mesh Consolidate(
Mesh[,] meshArray, // mesh array to be consolidated into one mesh
int width, // with and height to determine size of CombineInstance array
int height){
// Debug.Log ("Consolidate function");
CombineInstance[] TBC = new CombineInstance[width * height]; // construction of CombineInstance array ToBeConsolidated
int i = 0, j = 0;
for (j=0; j<height; j++) { // dubble for loop to flatten 2d meshArray array to 1d TBC array
for (i=0; i<width; i++){
TBC[i+(j*width)].mesh = meshArray[i,j];
// Debug.Log ("flattning array" + i + ", " + j);
}
}
Mesh mesh = new Mesh(); // constructing mesh variable type Mesh
mesh.CombineMeshes(TBC); // consolidating TBC array of Meshes into one mesh
return mesh; // return of the mesh variable
}
And my issue is that if I return mesh = TBC[0].mesh; then that single quad will render no problem (and I can put any calue there and it will work for every single quad) but return mesh.CombineMeshes(TBC); makes the thing not render at all.
Am I missing somehting? The function is located in separate file to keep the code clean so this might be a possible problem. I may also be using mesh.CombineMeshes(TBC); impropperly.
Also I had a lot of hard time looking for examples of use .CombineMeshes in c# there is very little documentation on that topic and what is there is barely readable to my inexpierienced eyes, so if you guys could provide a simple example of proper use of this method I would be very gratful
Answer by Jahith · Mar 09, 2014 at 03:36 PM
Hello thanks to mr. landon91235 I managed to find the reason why combine meshes caused nothing to render. I was wrong the mesh was being rendered but without a transformation matrix everything collapsed to a single point.
here is fixed code
Mesh Consolidate(
Mesh[,] meshArray, // mesh array to be consolidated into one mesh
int width, // width and height to determine size of CombineInstance array
int height,
Matrix4x4 a){
CombineInstance[] TBC = new CombineInstance[width * height]; // construction of CombineInstance array ToBeConsolidated
int i = 0, j = 0;
for (j=0; j<height; j++) { // dubble for loop to flatten 2d meshArray array to 1d TBC array
for (i=0; i<width; i++){
TBC[i+(j*width)].mesh = meshArray[i,j];
TBC[i+(j*width)].transform = a;
}
}
Mesh mesh = new Mesh(); // constructing mesh variable type Mesh
mesh.CombineMeshes(TBC); // consolidating TBC array of Meshes into one mesh
return mesh; // return of the mesh variable
}
From what I managed to figure out if I hand over LocalToWorldMatrix from Any game obiect this will work it will simply apply the GameObiects origin point rotation and scale to the mesh. So if you are using .CombineMeshes remember to supply your CombineInstance[] array with both the meshes you want to combine AND a transformation matrix.
It can be any localToWorldMatrix accesible from GameObject.transform.localToWorldMatrix where GameObject is a variable of GameObiect type. I did it by using this
GameObject[] a = new GameObject[GameObject.FindGameObjectsWithTag ("Ground").Length];
a = GameObject.FindGameObjectsWithTag ("Ground");
if you want to access the matrix in this case use a[0].transform.localToWorldMatrix
Your answer
Follow this Question
Related Questions
What is Accept Rate 1 Answer
How to use morphs? 3 Answers
Invoking Effects of (Random) Items (C#) 0 Answers
Instantiate within boundaries of Mesh shape 2 Answers
Mesh Decal System 0 Answers