what's wrong with this code?
Posted by Ususuus on Oct 27, 2018; 3:49am
URL: https://forum.jogamp.org/what-s-wrong-with-this-code-tp4039269.html
The code is as blow, i created 3 triangles (a list in Class Object), and each has it's own data in Class Part,, my problem is, all the 3 the triangles were drawn with the last triangle's vertex...
Please help to get me a trick...
public class Object {
public GL2 gl;
private ArrayList<JTPart> list = new ArrayList<>();
public Object(GL2 gl) {
this.gl = gl;
}
public boolean goLoad() {
try {
int[]xx= {0,1,2};
float[]va= {
3,0,0,
0,3,0,
-3,0,0};
float[]vb= {
20,0,10,
0,20,10,
-20,0,10};
float[]vc= {
30,0,20,
0,30,20,
-30,0,20};
float []colora= {1,0,0,
1,0,0,
1,0,0};
float []colorb= {0,1,0,
0,1,0,0,1,0};
float []colorc= {0,0,1,0,0,1
,0,0,1};
float[]uv= {0,0,20,
0,0,20,
0,0,20};
Part temp1 = new Part(gl);
temp1.genBuffers(xx, va, uv, colora);
list.add(temp1);
JTPart temp2 = new Part(gl);
temp2.genBuffers(xx, vb, uv, colorb);
list.add(temp2);
Part temp3 = new Part(gl);
temp3.genBuffers(xx, vc, uv, colorc);
list.add(temp3);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void Draw() {
for (int i=0;i<list.size();i++) {
list.get(i).Draw(0,x*(i/iMat),x*(i%iMat));
}
}
}
public class Part {
public GL2 gl;
private IntBuffer ibo, vbo;
private int count = 0;
public String partName = "";
public Part(GL2 gl) {
this.gl = gl;
}
public void genBuffers(int[] indicesArr, float[] verArr, float[] uvArr, float[] colorArr) {
IntBuffer indicesBuf;
FloatBuffer uvBuf, colorBuf, verBuf;
vbo = Buffers.newDirectIntBuffer(3);
ibo = Buffers.newDirectIntBuffer(1);
indicesBuf = Buffers.newDirectIntBuffer(indicesArr);
verBuf = Buffers.newDirectFloatBuffer(verArr);
uvBuf = Buffers.newDirectFloatBuffer(uvArr);
colorBuf = Buffers.newDirectFloatBuffer(colorArr);
count = indicesArr.length * 3;
gl.glGenBuffers(3, vbo);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(0));
gl.glBufferData(GL2.GL_ARRAY_BUFFER, verBuf.capacity() * Buffers.SIZEOF_FLOAT, verBuf, GL2.GL_STATIC_DRAW);
gl.glVertexPointer(3, GL2.GL_FLOAT, 0, 0);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(1));
gl.glBufferData(GL2.GL_ARRAY_BUFFER, uvBuf.capacity() * Buffers.SIZEOF_FLOAT, uvBuf, GL2.GL_STATIC_DRAW);
gl.glNormalPointer(GL2.GL_FLOAT, 0, 0);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(2));
gl.glBufferData(GL2.GL_ARRAY_BUFFER, colorBuf.capacity() * Buffers.SIZEOF_FLOAT, colorBuf, GL2.GL_STATIC_DRAW);
gl.glColorPointer(3, GL2.GL_FLOAT, 0, 0);
gl.glGenBuffers(1, ibo);
gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, ibo.get(0));
gl.glBufferData(GL2.GL_ELEMENT_ARRAY_BUFFER, indicesBuf.capacity() * Buffers.SIZEOF_INT, indicesBuf, GL2.GL_STATIC_DRAW);
verBuf = null;
uvBuf = null;
colorBuf = null;
indicesBuf = null;
}
public void Draw(float x, float y, float z) {
gl.glTranslatef(x, y, z);
gl.glEnable(GL2.GL_COLOR_MATERIAL);
gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(0));
gl.glVertexPointer(0, 3, GL2.GL_FLOAT, 0);
gl.glEnableClientState(GL2.GL_NORMAL_ARRAY);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(1));
gl.glNormalPointer(GL2.GL_FLOAT, 0, 0);
gl.glEnableClientState(GL2.GL_COLOR_ARRAY);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo.get(2));
gl.glColorPointer(3, GL2.GL_FLOAT, 0, 0);
gl.glEnableClientState(GL2.GL_ELEMENT_ARRAY_BUFFER);
gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, ibo.get(0));
gl.glDrawElements(GL2.GL_TRIANGLES, count, GL2.GL_UNSIGNED_INT, 0);
gl.glDisable(GL2.GL_COLOR_MATERIAL);
gl.glTranslatef(-x, -y, -z);
}
}