Hallo an alle,
ich stecke mal wieder an einem Problem fest.
Und zwar wollte ich einen Kreis zeichnen. Das funktioniert auch alles soweit sogut.
Jetzt ist nur mein Problem, das mein einfaches Vertices Object mit Color_Array verschwindet, sobald ich ein Object mit einer Texture_Coord_Array danach zeichne.
Ich zeig euch erstmal den Code, er ist schon sehr komplex und es gibt haufenweise extra Klassen, also probiere ich mal zu erklären was hinter jeder einzelnen Methode sich verbirgt.
In allen Methoden zeichne ich rechteckige Vertices mit Texturen in etwa so:
Erst wird bind(), dann draw() dann unbind() aufgerufen.
Bzw gl.glBindTexture(GL10.GL_TEXTURE_2D,textureId); wird vor allem aufgerufen.!!!
Und genau das ist der springende Punkt, wenn ich die Methode weglasse, wird mein Kreis noch gezeichnet, nachdem die Icons gezeichnet sind.
Aber die Icons werden genauso gezeichnet, wie das Raster. Also ich versteh nicht so recht, was OpenGL da anstellt und warum mein Circle plötzlich verschwindet.
Das Problem ist etwas schwer zu erklären und ich will auch nicht 1000 Zeilen Code hier reinposten.
Achso, ich habe noch etwas bemerkt. Wenn ich das Blend weglasse, funktionierts immer, nur das der Kreis dann schwarz wird und nicht mehr Halb-Transparent Blau... also kann es auch ein zusammenspiel aus gl.glColorPointer(), Blend und Texturen sein ...
Vielleicht hat jemand schonmal so ein Problem gehabt
Achso und wofür brauche man: gl.glTexEnvf?
Vielen Dank Oliver
ich stecke mal wieder an einem Problem fest.
Und zwar wollte ich einen Kreis zeichnen. Das funktioniert auch alles soweit sogut.
Jetzt ist nur mein Problem, das mein einfaches Vertices Object mit Color_Array verschwindet, sobald ich ein Object mit einer Texture_Coord_Array danach zeichne.
Ich zeig euch erstmal den Code, er ist schon sehr komplex und es gibt haufenweise extra Klassen, also probiere ich mal zu erklären was hinter jeder einzelnen Methode sich verbirgt.
Code:
public void present(float deltaTime){
GL10 gl=glGraphics.getGL();
guiCam.setViewportAndMatrices();//Ignore setzt nur den Viewport
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glEnable(GL10.GL_TEXTURE_2D);
drawStaticGround();//Methode um den Hintergrund zu zeichnen ohne Alpha
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA);
drawStaticGroundRaster();//Methode um ein Raster über die komplette Welt zu zeichnen
drawIcons();//Zeichnet nach der selben Methode wie drawStaticGroundRaster Icons zum bedienen, aber der Circle verschwindet nach dieser.
circleDraw.draw();//hier wirds interessant ist die Methode vor den Icons sieht man ihn, ist er danach ist er verschwunden ... dabei ist Icons und drawStaticGroundRaster vom Aufbau das selbe.
gl.glDisable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_TEXTURE_2D);
}
In allen Methoden zeichne ich rechteckige Vertices mit Texturen in etwa so:
Code:
public void bind(){
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
vertices.position(0);
gl.glVertexPointer(2,GL10.GL_FLOAT,vertexSize,vertices);
if(hasColor){
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
vertices.position(2);
gl.glColorPointer(4,GL10.GL_FLOAT,vertexSize,vertices);
}
if(hasTexCoords){
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
vertices.position(hasColor?6:2);
gl.glTexCoordPointer(2,GL10.GL_FLOAT,vertexSize,vertices);
}
}
public void draw(int primitiveType,int offset,int numIndices){
if(indices!=null){
indices.position(offset);
gl.glDrawElements(primitiveType,numIndices,GL10.GL_UNSIGNED_SHORT,indices);
}else{
gl.glDrawArrays(primitiveType,offset,numIndices);
}
}
public void unbind(){
if(hasTexCoords)
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
if(hasColor)
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
}
Erst wird bind(), dann draw() dann unbind() aufgerufen.
Bzw gl.glBindTexture(GL10.GL_TEXTURE_2D,textureId); wird vor allem aufgerufen.!!!
Und genau das ist der springende Punkt, wenn ich die Methode weglasse, wird mein Kreis noch gezeichnet, nachdem die Icons gezeichnet sind.
Aber die Icons werden genauso gezeichnet, wie das Raster. Also ich versteh nicht so recht, was OpenGL da anstellt und warum mein Circle plötzlich verschwindet.
Das Problem ist etwas schwer zu erklären und ich will auch nicht 1000 Zeilen Code hier reinposten.
Achso, ich habe noch etwas bemerkt. Wenn ich das Blend weglasse, funktionierts immer, nur das der Kreis dann schwarz wird und nicht mehr Halb-Transparent Blau... also kann es auch ein zusammenspiel aus gl.glColorPointer(), Blend und Texturen sein ...
Vielleicht hat jemand schonmal so ein Problem gehabt
Achso und wofür brauche man: gl.glTexEnvf?
Vielen Dank Oliver