Android OpenGL - Выход за край Структуры ES

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

Я рисую эту карту как 10 x 15 групп "четверок", которые являются, заражают все треугольные полосы. Я использую "карту" для захвата интервала, который я затем беру в качестве местоположения структуры для этого квадрата в textureAtlas., таким образом, например, 0 нижняя левая "мозаика". Атлас составляет 128 x 128 и разделение в мозаики на 32 пикселя.

Однако я, кажется, получаю некоторые нечетные артефакты, где структура от одной мозаики закрадывается к следующей мозаике. Я задался вопросом, было ли это само изображение, но насколько я могу сказать, что пиксели точно, где они должны быть. Я затем посмотрел на провода структуры, которые я указывал, но они все выглядят точными (0.0, 0.25, 0.5, 0.75, 1.0 - разделение его в эти 4 строки и столбцы, которые я ожидал бы).

Нечетная вещь состоит в том, если я выполняю ее на эмуляторе, я не получаю артефактов.

Существует ли установка, которую я пропускаю, который вызвал бы выход за край 1 пикселя? Это, казалось, только было вертикально также - это могло быть связано с по телефону, я "расширяю" изображение в том направлении, поскольку экран телефона больше, чем нормальный в том направлении.

Я загружаю структуру как так:

//Get a new ID
    int id = newTextureID(gl);

    //We will need to flip the texture vertically
    Matrix flip = new Matrix();
    flip.postScale(1f, -1f);

    //Load up and flip the texture
    Bitmap temp = BitmapFactory.decodeResource(context.getResources(), resource);

    //Store the widths for the texturemap
    int width = temp.getWidth();
    int height = temp.getHeight();
    Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, width, height, flip, true);
    temp.recycle();

    //Bind
    gl.glBindTexture(GL10.GL_TEXTURE_2D, id);

    //Set params
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR);

    //Push onto the GPU
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);

    TextureAtlas atlas = new TextureAtlas(id, width, height, tileSize);
    return atlas;

Я затем представляю его как так:

gl.glBindTexture(GL10.GL_TEXTURE_2D, currentAtlas.textureID);
    //Enable the vertices buffer for writing and to be used during our rendering
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    //Specify the location and data format of an array of vertex coordinates to use
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    //Enable the texture buffer
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);

Я сделал бы снимок, но я не уверен, как получить снимок экрана от телефона...

Если кто-либо будет знать о том, как я могу получить текущий кадр и возможно произвести его в файл, я сделаю это, если он поможет объяснить, что продолжается!

С нетерпением ждите своего ответа.

Править: Вот снимок экрана - отмечают, что я запускаю приложение в среде, но ограничение находится в портрете. Также извините ужасные структуры :D они были просто заполнителем / бездельничание.

ScreenCap

5
задан iexus 18 October 2010 в 19:18
поделиться