Проблема загрузки текстуры OpenGL-ES с UV картами - PullRequest
1 голос
/ 07 августа 2011

Hy У меня небольшая проблема с текстурированием openGL-ES.Я создал модель в 3ds max и использовал для нее UV-карту, как вы можете видеть здесь (1-е изображение). Моя UV-карта.Без UV-наложения моя загрузка текстур "идеальна", но с UV-картами ... (2-е изображение здесь ), посмотрите на тележку).

Я загружаю эту модель (тележку) изфайл obj, нет проблем с моим кодом или с obj, потому что он работает с простыми текстурами, может быть, мой метод loadtexture плохой, пожалуйста, проверьте его, или у вас есть идеи?Спасибо за ваши ответы, у меня нет идей.

Код загрузки текста:

private int[] textures = new int[3];
    public void loadtexture(GL10 gl, Context mContext, String map_source) {
            try {
                InputStream is = mContext.getAssets().open(map_source);
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                is.close();
                gl.glGenTextures(3, textures, 0);

                gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
                        GL10.GL_NEAREST);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
                        GL10.GL_NEAREST);
                GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);


                gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[1]);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
                        GL10.GL_LINEAR);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
                        GL10.GL_LINEAR);
                GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

                gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[2]);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
                        GL10.GL_LINEAR);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
                        GL10.GL_LINEAR_MIPMAP_NEAREST);
                if (gl instanceof GL11) {
                    gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP,
                            GL11.GL_TRUE);
                    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
                } else {
                    buildMipmap(gl, bitmap);
                }
                bitmap.recycle();
            } catch (IOException e) {
                // Should never happen
            }
        }

        private void buildMipmap(GL10 gl, Bitmap bitmap) {
            //
            int level = 0;
            //
            int height = bitmap.getHeight();
            int width = bitmap.getWidth();

            //
            while (height >= 1 || width >= 1) {

                GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0);

                //
                if (height == 1 || width == 1) {
                    break;
                }

                // Increase the mipmap level
                level++;

                //
                height /= 2;
                width /= 2;
                Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height,
                        true);

                // Clean up
                bitmap.recycle();
                bitmap = bitmap2;
            }
        }

PS Извините за мой английский.

1 Ответ

2 голосов
/ 09 августа 2011
private int[] textures = new int[3];
    public void loadtexture(GL10 gl, Context mContext, String map_source) {
            try {
InputStream is = mContext.getAssets().open(map_source);
            Bitmap bitmap2 = BitmapFactory.decodeStream(is);
            is.close();
            Matrix flip = new Matrix();
            flip.postScale(1f, -1f);
            Bitmap bitmap =  Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), flip, true);
            bitmap2.recycle();
... (same like before)

Так что я перевернул его по вертикали, потому что загрузка карт в opengl немного отличается. Я надеюсь, что помог некоторым, кто попал в беду с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...