Monday, July 24, 2017

java - How to make the background of an OpenGL object transparent?



It sounds so simple but i didn't get it to work.


The Background of my FrameLayout where i add the GLSurfaceView in is colored blue but there is only black.


So here is my method to initiate the Surface...GL..


private void initGL(){

ourSurfaceView = new GLSurfaceView(this); // GLSurfaceView Objekt erstellen

ourSurfaceView.setEGLConfigChooser(new MultisampleConfigChooser());
ourSurfaceView.setRenderer(new GLRendererTamago());

//In every help i read that it shoud help to use the following two commands... but they did nothing for me.
ourSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
ourSurfaceView.setZOrderOnTop(true);

FrameLayout tama_layout = (FrameLayout)findViewById(R.id.LayoutTama);
tama_layout.addView(ourSurfaceView, 0);


}

Someone have any idea?


edit: added the code from my renderer


@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {

gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_BLEND);

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
// gl.glClearDepthf(1f);
// gl.glClearColor(0,0,0,0);
}

@Override
public void onDrawFrame(GL10 gl) {

gl.glDisable(GL10.GL_DITHER);

gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 2, 0);

body.draw(gl);
eyes.draw(gl);
mouth.draw(gl);
}


@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

gl.glViewport(0, 0, width, height);
float ratio = (float)width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 20);
}


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...