Основная проблема OpenGL ES Texture / Android - PullRequest
1 голос
/ 29 июня 2010

Мне очень трудно заставить базовые текстуры работать в приложении OpenGL ES на моем Droid (2.1-update1).Я пытаюсь визуализировать простой текстурированный квадрат - четыре вершины, две грани, с нормалями и координатами текстуры.При визуализации текстура искажается и полна статического электричества, похожего на телевизионный шум.

Вот изображение, показывающее исходное изображение карты текстуры, а затем снимок экрана моего дроида с рендерингом текстурированного квадрата: http://img686.imageshack.us/img686/6342/texturedquad.png

Основные цвета есть, но, очевидно, текстура нетt читается или применяется правильно.

Моя последовательность загрузки текстуры проста:

int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
Bitmap bmp = BitmapFactory.decodeResource(cx.getResources(), R.drawable.img);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);

Я пытался установить различные параметры для glTexParameterf во время загрузки текстуры, но безрезультатно:

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_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);

Моя последовательность визуализации также очень проста:

(настройка)

gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_FOG);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glDisable(GL10.GL_COLOR_MATERIAL);
gl.glShadeModel(GL10.GL_SMOOTH);

(визуализация)

gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertices);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, textureCoords);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
gl.glDrawElements(GL10.GL_TRIANGLES, numIndices, GL10.GL_UNSIGNED_SHORT, indices);

...

Я пробовал различные форматы файлов текстурных изображений, все размеры ^ 2, помещенные в папку drawable-nodpi.PNG, BMP, GIF, JPEG все дают мне тот же результат.Я также пробовал 8 и 16-битную глубину цвета.Я запускаю это поверх GLSurfaceView с конфигурацией EGL по умолчанию.

Может кто-нибудь пролить свет на то, почему моя текстура искажается?

Ниже приведены мои данные index / vertex / normal / texcoord.Я прошел через это дюжину раз, но, возможно, я что-то пропустил.

Adding vertex (vIndex 1) Vector3F(77.0492, 0.0, 0)
Adding vertex (vIndex 2) Vector3F(478.1715, 0.0, 0)
Adding vertex (vIndex 3) Vector3F(478.1715, 227.0969, 0)
Adding vertex (vIndex 4) Vector3F(77.0492, 227.0969, 0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding textureCoords Vector3F(0.0, 0.0)
Adding textureCoords Vector3F(1.0, 0.0)
Adding textureCoords Vector3F(1.0, 1.0)
Adding textureCoords Vector3F(0.0, 1.0)
Adding face indexes 1,2,3
Adding face indexes 3,4,1

1 Ответ

1 голос
/ 30 июня 2010

Хорошо, не обращайте внимания на мой вопрос, я нашел проблему.

Оказывается, мои текстурные координаты были сохранены как 32-битные беззнаковые целые, и я передавал GL_SHORT в вызов glTexCoordPointer (мне нужно было использовать GL_FIXED). Это объясняет случайное статическое наложение текстуры, которое вы можете увидеть в результате визуализации.

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