OpenGL масштабирующая текстура - PullRequest
1 голос
/ 28 декабря 2011

Я использую OpenGL для рисования текстур в моей игре.

glClear(GL_COLOR_BUFFER_BIT);

float w = 128;
float h = 128;

w *= scale;
h *= scale;

GLfloat vertices[] = {
    w, 0,
    w, h,
    0, 0,
    0, h
};

float u1 = 0;
float u2 = 1;
float v1 = 0;
float v2 = 1;

GLfloat texCoords[] = {
    u2, v1,
    u2, v2,
    u1, v1,
    u1, v2
};

glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

Это простой пример, чтобы объяснить мою проблему. Я изменяю переменную масштаба, которая влияет только на вершины треугольника и не должна изменять координаты текстуры. Когда масштаб равен 1, у меня есть это изображение:

один http://dl.dropbox.com/u/21467/opengl/1.png

Когда я изменяю масштаб на 0,99, у меня появляется эта картинка:

два http://dl.dropbox.com/u/21467/opengl/3.png

Если вы посмотрите внимательно, вы заметите небольшую полоску на вершине текстуры. Почему это там и как я могу избежать этого?

В моей реальной игре я рисую плитки, и если я меняю масштаб, у моих плиток появляются эти полосы, и в результате я получаю эту неприятную сетку полос в своей игре. Кто-нибудь знает, что не так?

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Вызовите следующий код при создании буфера текстур:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Если вы посмотрите внимательно, вы заметите небольшую полоску на вершине текстуры. Почему это там и как я могу избежать этого?

То, что происходит, заключается в том, что в определенных пикселях координата текстуры в этой позиции экрана может выглядеть примерно так: -0.0001 или 1.0002. Параметр текстуры TEXTURE_WRAP_ [S / T] подробно описывает, что произойдет, когда это произойдет.

1 голос
/ 28 декабря 2011

Второй раз сегодня ...

Смотрите этот ответ:

https://stackoverflow.com/a/8643282/524368


О, мальчик, вы, люди, никогда не гуглите из-за проблемы? Это стало некоторым вроде FAQ:

Я ответил здесь

https://stackoverflow.com/a/5879551/524368

и здесь

https://stackoverflow.com/a/7272871/524368

и в некоторых других местах.

...