android Texture2D приводит к потере 3d-цвета

#android #opengl-es #colors #texture2d

#Android #opengl-es #Цвет #texture2d

Вопрос:

я пытаюсь нарисовать 3d-объект, а затем нарисовать 2d-текстуру на экране. Текстура создается с помощью этой функции в onSurfaceCreated(GL10 gl):

 public static int loadText(GL10 gl, float width, float height, String text) {
        gl.glGenTextures(1, mTextureNameWorkspace, 0);
        textureName = mTextureNameWorkspace[0];
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
        gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
        bitmap = Bitmap.createBitmap((int) width, (int) height, Bitmap.Config.ARGB_4444);
        canvas = new Canvas(bitmap);
        canvas.drawText(text, width / 2, 50, paint);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        mCropWorkspace[0] = 0;
        mCropWorkspace[1] = bitmap.getHeight();
        mCropWorkspace[2] = bitmap.getWidth();
        mCropWorkspace[3] = -bitmap.getHeight();
        bitmap.recycle();
        ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0);
        return textureName;
    }
  

Проблема в том, что если я рисую рамки, не вызывая это, 3d-объект становится оранжевым, но, очевидно, 2d-текстура не прорисовывается. Но если я нарисую рамку после вызова этого, 3d-объект станет черным. Код, который я использую для рисования:

         gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glDisable(GL10.GL_BLEND);
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 500.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glTranslatef(4, 2, -10);
        gl.glRotatef(45, 0, 1, 0);
        car.draw(gl);
  

Ответ №1:

Вы нигде не включаете модуль текстуры. Перед выполнением любого другого вызова, связанного с текстурой, поставьте glEnable(GL_TEXTURE_2D) .

Комментарии:

1. я поместил gl.glDisable(GL10. GL_TEXTURE_2D); в начале onDrawFrame (GL10 gl), и это сработало отлично, благодаря