- Home /
Question by
Cilantro · Jun 27, 2013 at 03:28 PM ·
meshgeneration
Generating a hexagonal prism mesh, problem...
I am attempting to generate a hexagonal prism mesh using code... However, the code seems to give me somewhat of a garbled mess... I can see some of the prism is there, but there are missing sides and whatnot...
var radius : float;
var width : float;
function Start() {
var mf: MeshFilter = GetComponent(MeshFilter);
var mesh = new Mesh();
mf.mesh = mesh;
var vertices: Vector3[] = new Vector3[12];
vertices[0] = new Vector3(radius / 2, radius, 0);
vertices[1] = new Vector3(radius, 0, 0);
vertices[2] = new Vector3(radius / 2, -radius, 0);
vertices[3] = new Vector3(-radius / 2, -radius, 0);
vertices[4] = new Vector3(-radius, 0, 0);
vertices[5] = new Vector3(-radius / 2, 0, 0);
vertices[6] = new Vector3(-radius / 2, 0, width);
vertices[7] = new Vector3(-radius, 0, 0);
vertices[8] = new Vector3(-radius / 2, -radius, width);
vertices[9] = new Vector3(radius / 2, -radius, width);
vertices[10] = new Vector3(radius, 0, width);
vertices[11] = new Vector3(radius / 2, radius, width);
mesh.vertices = vertices;
var tri : int[] = [
0, 1, 2,
0, 2, 3,
0, 3, 4,
0, 4, 5,
11, 10, 9,
11, 8, 7,
11, 6, 7,
0, 6, 11,
0, 5, 6,
5, 6, 7,
5, 4, 7,
4, 7, 8,
4, 3, 8,
3, 2, 8,
9, 2, 8,
1, 2, 9,
1, 10, 9,
0, 11, 1,
10, 11, 1
];
mesh.triangles = tri;
var normals: Vector3[] = new Vector3[6];
normals[0] = -Vector3.forward;
normals[1] = -Vector3.forward;
normals[2] = -Vector3.forward;
normals[3] = -Vector3.forward;
normals[4] = -Vector3.forward;
normals[5] = -Vector3.forward;
mesh.normals = normals;
}
Please help!!!
Comment
Answer by Seregon · Jun 27, 2013 at 05:43 PM
I think the issue is the triangles your assigning. I couldn't find one simple fix, so ended up redoing most of the code in Unity, to come up with the code below. Depending on how you want it textured and lit, you'll probably want to change how the normals are calculated.
Hope this helps, or atleast gets you started.
var radius : float;
var width : float;
function Start() {
var mf: MeshFilter = GetComponent(MeshFilter);
var mesh = new Mesh();
mf.mesh = mesh;
var vertices: Vector3[] = new Vector3[12];
// Top face
for(i = 0; i < 6; i++)
{
vertices[i] = new Vector3(radius * Mathf.Sin(i * Mathf.PI / 3), width / 2, radius * Mathf.Cos(i * Mathf.PI / 3));
}
// Bottom face
for(i = 6; i < 12; i++)
{
vertices[i] = new Vector3(radius * Mathf.Sin(i * Mathf.PI / 3), -width / 2, radius * Mathf.Cos(i * Mathf.PI / 3));
}
mesh.vertices = vertices;
var tri : int[] = [
// Top face:
0, 1, 2,
0, 2, 3,
0, 3, 4,
0, 4, 5,
// Bottom face:
6, 8, 7,
6, 9, 8,
6, 10, 9,
6, 11, 10,
// Sides:
0, 6, 1,
6, 7, 1,
1, 7, 2,
7, 8, 2,
2, 8, 3,
8, 9, 3,
3, 9, 4,
9, 10, 4,
4, 10, 5,
10, 11, 5,
5, 11, 0,
11, 6, 0
];
mesh.triangles = tri;
var normals: Vector3[] = new Vector3[12];
for(i=0;i<normals.length;i++)
{
normals[i] = Vector3.up;
}
mesh.normals = normals;
mf.mesh = mesh;
}
Your answer
