Black color is rendered as transparent !!!

Started by ares91x, September 11, 2016, 10:35:40 AM

Previous topic - Next topic

ares91x

Hi, i have integrated JPCT-AE with ARtoolkit and it works fine but can't render black color, when i render an object the black part of the texture is rendered as transparent.

This is the ARtoolkit Render
public class ARRenderer implements GLSurfaceView.Renderer {

    /**
     * Allows subclasses to load markers and prepare the scene. This is called after
     * initialisation is complete.
     */
public boolean configureARScene() {
return true;
}

    public void onSurfaceCreated(GL10 unused, EGLConfig config) {       
   
    // Transparent background
    GLES10.glClearColor(0.0f, 0.0f, 0.0f, 0.f);
    }

    public void onSurfaceChanged(GL10 unused, int w, int h) {
    GLES10.glViewport(0, 0, w, h);
    }

    public void onDrawFrame(GL10 gl) {
    if (ARToolKit.getInstance().isRunning()) {   
    draw(gl);
    }   
    }
   
    /**
     * Should be overridden in subclasses and used to perform rendering.
     */
    public void draw(GL10 gl) {
    GLES10.glClear(GLES10.GL_COLOR_BUFFER_BIT | GLES10.GL_DEPTH_BUFFER_BIT);
    }
   
}


and this is JPCT-AE render
public class RenderARESX extends ARRenderer {

    private World mWorld;
    private Camera mCamera;
    private FrameBuffer mBuffer ;

    Matrix projMatrix = new Matrix();

    @Override
    public boolean configureARScene() {

        Config.useRotationPivotFrom3DS=true;
        // Initialize the game world and the camera
        mWorld = new World();
        mWorld.setClippingPlanes(0.1f, 10000.0f);
        mWorld.setAmbientLight(150, 150, 150);

        mCamera = mWorld.getCamera();

        // Load all objects to the world
        for (AmbientElement ae: MainScene.getInstance ().getAmbientElementsList()) {
            // init AmbientElement
            if (!ae.initRendering(mWorld) ) {
                // If there was a problem, return false
                return false;
            }
            //Log.wtf("esx","getmMarkerId = "+ae.getTracer().getmMarkerId());
        }

        return true;
    }

    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {

    }

    @Override
    public void onSurfaceChanged(GL10 gl10, int w, int h) {

        Config.useRotationPivotFrom3DS=true;

        super.onSurfaceChanged(gl10, w, h);
        mBuffer = new FrameBuffer(gl10,w,h);
    }

    float[] projection;
    @Override
    public void onDrawFrame(GL10 gl10) {

        mBuffer.clear();

        try {
            projection = ARToolKit.getInstance().getProjectionMatrix();

            projMatrix.setIdentity();
            projMatrix.setDump(projection);
            projMatrix.transformToGL();

            SimpleVector translation = projMatrix.getTranslation();
            SimpleVector dir = projMatrix.getZAxis();
            SimpleVector up = projMatrix.getYAxis();

            mCamera.setPosition(translation);
            mCamera.setOrientation(dir, up);

            for (AmbientElement ae : MainScene.getInstance().getAmbientElementsList()) {
                ae.updateMarkerTransformation();
            }

            mWorld.renderScene(mBuffer);
            mWorld.draw(mBuffer);
            mBuffer.display();
        }catch (Exception e){
            Log.e("esx","ERRORE RenderARESX.onDrawFrame "+e.toString());
            e.printStackTrace();
        }
    }

}


is it possible that this make the black part of the texture transparent GLES10.glClearColor(0.0f, 0.0f, 0.0f, 0.f); in ARtoolkit render?
I tried to change this but nothing happens.
Any idea how to solve this?

MichaelJPCT


EgonOlsen

By default, the texture loader creates an alpha channel out of the black pixels of a texture. If you don't want that, use the constructor that takes the boolean argument in addition and set it to true.
Anyway, the alpha channel will only be taken into account when transparency is enabled on the object. Some objects are exported in a way that the loader defaults to transparency. Just try Michael's suggestion and see if that helps.

ares91x

nothing happens , i tried 3dobject.setTrasparency(-1); with 3ds and md2 models and it still transparent

Can it be that this GLES10.glClearColor(0.0f, 0.0f, 0.0f, 0.f); on the ARtoolkit render make the texture transparent?

EgonOlsen

No, it can't. Clearing the framebuffer has no influence on how a texture will be rendered. It might be caused by the fact that the framebuffer itself is transparent. Try setTransparency(-1) in combination with using the new Texture(..., true)-constructor for your textures.