Color problem
Posted by Ususuus on Sep 14, 2018; 11:13am
URL: https://forum.jogamp.org/Color-problem-tp4039217.html
Hi there,
I was encoutering a problem and have no idea how to fix it. the code is as below, the problem is that, when i draw one .obj file, everytiing is fine. but if i draw 2 diffient obj files, the color of the first obj would be overwrited by the following obj.
I seached a lot and i guess it must be something about "color clear or something", but after hundreds of times of trying,still stucked here...
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClearColor(0.95f, 0.95f, 0.95f, 0.5f);
gl.glClearDepth(1.0f);// set clear depth value to farthest
gl.glEnable(GL2.GL_DEPTH_TEST); // enables depth testing
gl.glEnable(GL2.GL_CULL_FACE);
gl.glDepthFunc(GL2.GL_LEQUAL); // the type of depth test to do
gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glEnable(GL2.GL_NORMALIZE);
loadModels(gl);
gl.glMatrixMode(GL2.GL_MODELVIEW);
animator.start();
}
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
setLight(gl,lightAmb,lightDif);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(-frameWidth/2, frameWidth/2, -frameHeight/2, frameHeight/2, -near,near);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glScaled(fScale *0.1, fScale *0.1, fScale*0.1);
gl.glTranslatef(transf.x, transf.y, transf.z);
gl.glRotatef(rotatef.y, 1f, 0f, 0f);
gl.glRotatef(rotatef.x, 0f, 1f, 0f);
gl.glScaled(fScale * fScaleRate, fScale * fScaleRate, fScale * fScaleRate);
drawAsixes(gl);
if (iCounter<10) {
if(mObj.size()==0) {
mObj.add(new M3DPart(gl,"E:/123.obj"));
}
mObj.get(0).mDrawInPos(0, 100, 0, 0, 0, 0);
}else {
if(mObj.size()==1) {
mObj.add(new M3DPart(gl,"E:/xxx.obj"));
}
mObj.get(0).mDrawInPos(0, 100, 0, 0, 0, 0);
mObj.get(1).mDrawInPos(0, 200, 0, 0, 0, 0);
}
gl.glFlush();
if (animator.isPaused() == false) {
iCounter++;
animator.pause();
}
}
public void Draw() {
gl.glEnable(GL2.GL_COLOR_MATERIAL);
gl.glEnableVertexAttribArray(0);
gl.glBindBuffer(GL_ARRAY_BUFFER, vbo.get(0));
gl.glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
gl.glEnableClientState(GL_VERTEX_ARRAY);
gl.glEnableVertexAttribArray(1);
gl.glBindBuffer(GL_ARRAY_BUFFER, vbo.get(1));
gl.glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);
gl.glEnableClientState(GL_COLOR_ARRAY);
gl.glEnableVertexAttribArray(2);
gl.glBindBuffer(GL_ARRAY_BUFFER, vbo.get(2));
gl.glVertexAttribPointer(2, 2, GL_FLOAT, false, 0, 0);
gl.glEnableClientState(GL_NORMAL_ARRAY);
gl.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo.get(0));
gl.glDrawElements(GL_TRIANGLES, data.faceCounter*3, GL_UNSIGNED_INT, 0);
gl.glEnableClientState(GL_ELEMENT_ARRAY_BUFFER);
// gl.glDisableVertexAttribArray(0);
// gl.glDisableVertexAttribArray(1);
// gl.glDisableVertexAttribArray(2);
gl.glDisable(GL2.GL_COLOR_MATERIAL);
}