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

Теперь мне интересно, как масштабировать текстуру пола, я уже пробовал масштабировать текстуру фотошопом, но результат тот же, но тяжелее.


person Luca    schedule 24.01.2013    source источник


Ответы (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);`

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

person Dinesh Subedi    schedule 24.01.2013

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

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

person JasonD    schedule 24.01.2013
comment
также спасибо за подсказку о переключении каналов, я даже не заметил :) - person Luca; 24.01.2013