opengl, текстуры всегда одинакового размера

Я пытаюсь применить текстуру к массиву вершин со следующим кодом:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 12, GL_UNSIGNED_BYTE, faceIndices);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glDisable(GL_TEXTURE_2D);

С этой текстурой: texture

Итак, у меня есть этот результат: Result

теперь мне интересно, как я могу масштабировать текстуру пола, я уже пытался масштабировать текстуру с помощью photoshop, но результат тот же, но тяжелее.

2 ответов


это зависит от ваших координат текстуры, как вы хотите отобразить текстуру. Давайте возьмем пример, он охватывает весь многоугольник

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);

теперь, если вы хотите повторить текстуру пять раз, укажите координаты, такие как'

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(5.0f, 0.0f);
glTexCoord2f(5.0f, 5.0f);
glTexCoord2f(0.0f, 5.0f);`

как показано выше, измените значение, как вы хотите отобразить текстуру.


Я предполагаю, что вы хотите, чтобы текстура плитки меньше или плитки больше. В этом случае измените координаты текстуры, а не текстуру (т. е. любые данные в texcoords).

кроме того, ваша текстура примера синяя, но она коричневая в отображаемом изображении. Возможно, вы меняете местами каналы R+B при загрузке.