Author: obsidian_golem (posted 2012-05-21 02:28:41, viewed 190 times)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| package org.obsgolem.crystalia.objects;
import java.util.ArrayList;
import java.util.Arrays;
import org.obsgolem.crystalia.gfx.Renderer;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.VertexAttribute;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
public class MeshBatch {
private Mesh m;
private ArrayList<Float> vertices;
private ArrayList<Short> indices;
public short indexcount = 0;
public MeshBatch() {
vertices = new ArrayList<Float>();
indices = new ArrayList<Short>();
}
public void addMesh(float[] vert, Short[] ind) {
vertices.addAll(Arrays.asList(toObject(vert)));
short[] sorted = addIndices(toPrimitive(ind, (short) 0));
indices.addAll(Arrays.asList(toObject(sorted)));
Arrays.sort(sorted);
indexcount = (short) (sorted[sorted.length-1]+1);
}
public short[] addIndices(short[] ind) {
short[] indarr = new short[ind.length];
for(int i = 0; i < ind.length; i++) {
indarr[i] = (short) (ind[i] + indexcount);
}
return indarr;
}
public void finalize() {
m = new Mesh(false, vertices.size(), indices.size(), new VertexAttribute[]{new VertexAttribute(Usage.Position,3,"a_position"),
new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
new VertexAttribute(Usage.Normal, 3, "a_normal")});
m.setVertices(Renderer.makeFloatArray(vertices));
m.setIndices(Renderer.makeShortArray(indices));
}
public void render() {
Renderer.getInstance().render(m);
}
public static Float[] toObject(float[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return new Float[0];
}
final Float[] result = new Float[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = new Float(array[i]);
}
return result;
}
public static Short[] toObject(short[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return new Short[0];
}
final Short[] result = new Short[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = new Short(array[i]);
}
return result;
}
public static short[] toPrimitive(Short[] array, short valueForNull) {
if (array == null) {
return null;
} else if (array.length == 0) {
return new short[0];
}
final short[] result = new short[array.length];
for (int i = 0; i < array.length; i++) {
Short b = array[i];
result[i] = (b == null ? valueForNull : b.shortValue());
}
return result;
}
} |
Special syntax:
- To highlight a line (yellow background), prefix it with '@@'
- To indicate that a line should be removed (red background), prefix it with '-'
- To indicate that a line should be added (green background), prefix it with '+'
- To post multiple snippets, seperate them by '~~~~'
|
Add your game by posting it in the WIP section,
or publish it in Showcase.
The first screenshot will be displayed as a thumbnail.
|
|