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);
С этой текстурой:
Итак, у меня есть этот результат:
теперь мне интересно, как я могу масштабировать текстуру пола, я уже пытался масштабировать текстуру с помощью 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 при загрузке.