Hey,
I know there may be some topics about this, and I’ve done a search, but still I couldn’t find what I need. I have this navigation mesh generator library, and the input for the nav mesh generation is the scene itself I want to generate the mesh from. So, as far I as I know, I need to send to it the vertices and the indices. Looking at the lib’s javadoc, I got this
[java]
build(float[] vertices, int[] indices)
-
@param vertices The source geometry vertices in the form (x, y, z)
-
@param indices The triangle mesh vertices in the form
- (vertA, vertB, vertC), wrapped clockwise.[/java]
So the solution for the vertices parameter should be this:
[java]
float[] vertices = vectorToFloat(getVertices(SPATIAL));
public float[] vectorToFloat(Vector3f[] vec) {
float[] vertices = new float[vec.length * 3];
int i = -1;
int k = 0;
while (k < vec.length) {
vertices[++i] = vec[k].x;
vertices[++i] = vec[k].y;
vertices[++i] = vec[k].z;
k++;
}
return vertices;
}
public Vector3f[] getVertices(Spatial s) {
if (s instanceof Geometry) {
Geometry geometry = (Geometry) s;
FloatBuffer vertexBuffer = geometry.getMesh().getFloatBuffer(Type.Position);
return BufferUtils.getVector3Array(vertexBuffer);
} else if (s instanceof Node) {
Node n = (Node) s;
ArrayList<Vector3f[]> array = new ArrayList<Vector3f[]>();
for (Spatial ss : n.getChildren()) {
array.add(getVertices(ss));
}
int count = 0;
for (Vector3f[] vec : array) {
count += vec.length;
}
Vector3f[] returnn = new Vector3f[count];
count = -1;
for (Vector3f[] vec : array) {
for (int i = 0; i < vec.length; i++) {
returnn[++count] = vec;
}
}
return returnn;
}
return new Vector3f[0];
}[/java]
So far so good. And the solution for the second parameter? Can someone help me out here?