- Home /
Generated Mesh is partially rendered, but shown correctly in scene view
I generate a mesh by code. In the Scene and Game View, it is shown correctly, but when i look at the generated mesh in the inspector preview, only half the triangles are generated. The other ones are only visible on the other side, when i flip the preview around.
To explain, here are some screenshots:
Scene View
Game View
Inspector Preview
Inspector Preview flipped over
I also added a collision to my mesh. If i place a cube with gravity enabled over the mesh, it only collides with the triangles shown in picture #3.. This is also my main problem.
I think i have something with the triangles or the normals wrong, so here is my code.
MeshFilter mf = GetComponent<MeshFilter>();
Mesh mesh = new Mesh();
mf.mesh = mesh;
//Vertices
Vector3[] verticies = new Vector3[]
{
new Vector3(0,0,0),
new Vector3(2,0,0),
new Vector3(0,0,3),
new Vector3(2,0,3),
new Vector3(0,0,4),
new Vector3(2,0,4),
new Vector3(0,0,6),
new Vector3(2,0,6),
new Vector3(0,0,7),
new Vector3(6,0,7),
new Vector3(0,0,9),
new Vector3(6,0,9),
new Vector3(4,0,0),
new Vector3(6,0,0),
new Vector3(4,0,2),
new Vector3(6,0,2),
new Vector3(5,0,2),
new Vector3(6,0,2),
new Vector3(5,0,4),
new Vector3(6,0,4),
new Vector3(4,0,4),
new Vector3(6,0,4),
new Vector3(4,0,6),
new Vector3(6,0,6)
};
//Triangles
int[] tri = new int[]
{
0,1,2,
1,2,3,
4,5,6,
5,6,7,
8,9,10,
9,10,11,
12,13,14,
13,14,15,
16,17,18,
17,18,19,
20,21,22,
21,22,23
};
//Normals, to see the Object
Vector3[] normals = new Vector3[]
{
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward,
-Vector3.forward
};
//UVs what is displayed
Vector2[] uv = new Vector2[]
{
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1),
new Vector2(0,0),
new Vector2(1,0),
new Vector2(0,1),
new Vector2(1,1)
};
//Assign Arrays to Object
mesh.vertices = verticies;
mesh.triangles = tri;
mesh.normals = normals;
mesh.uv = uv;
MeshCollider mc = gameObject.AddComponent(typeof(MeshCollider)) as MeshCollider;
mc.sharedMesh = mesh; // Give it your mesh
I hope some of you can help me, i'd appretiate it!
It's just a problem with Normals in my opinion. Flip the normals of the triangles you cant see.
But aren't the Normals matching the vertices ins$$anonymous$$d the triangles? Flipping the normals didn't work, because each normal is dedicated to one point and not one triangle... or am i missing out on something?
Normals are for faces, no? Calculated through 3 or more vertices.
But why do i have to enter 24 vertices, 12 triangles and 24 normals? How would i flip the normals in my case?
Answer by Paulius-Liekis · Aug 24, 2013 at 07:24 PM
Reverse order (or simply flip two indices) in very triangle that is reversed. It's called CW (clock-wise) and CCW (counter-clock-wise) culling.
Reversing normals does not reverse triangles.
Your answer
Follow this Question
Related Questions
Bounds of dynamic mesh not updating 1 Answer
Unity5 Procedural meshing slower than in Unity4? 1 Answer
Procedurally generated mesh not Rendering all triangles 1 Answer
Unity won't show my programatically created Mesh(A Simple Triangle) 2 Answers
Sharing a generated mesh between multiple game objects 2 Answers