2015-05-03 2 views
2

Я хочу знать, как петля текстуры на поверхности объекта.Зацикливание текстуры на поверхности

Для практического примера я пытаюсь обработать рендеринг world geometry, так что, когда я изменяю размер объекта в два раза по размеру его текстуры, текстура будет отображаться дважды - не вдвое больше.

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

Вот картинка, показывающее то, что я ищу, при изменении размеров плоскости на XAxis:

example

Наряду со многими другими переменными, я прохожу UVMap объекта к моему шейдеру в качестве «текстур координат», а затем я выполнить следующие действия для рендеринга текстур объекта до розыгрыша массивов вызова:

QImage image; 
image = worldObject->getQImage(i); //Within a for loop, grabs the right texture if the object has differing textures per face of object 

glBindTexture(GL_TEXTURE_2D, spot); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits()); 

ответ

5

Это очень легко сделать. Где вы сейчас используете координаты текстуры в диапазоне [0.0, 1.0], вы просто используете больший диапазон. Например, чтобы дважды повторить текстуру, как показано в вашем примере, вы указываете координаты текстуры в диапазоне [0.0, 2.0].

Это работает в сочетании с использованием GL_REPEAT для режима текстуры обруча:

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

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

Указывает, что текстуру необходимо повторить для координат текстуры вне диапазона [0.0, 1.0]. Например, координаты текстуры между 1.0 и 2.0 будут эквивалентны координатам между 0.0 и 1.0, повторяя всю текстуру.

+0

Спасибо, это было именно то, что я искал. – Yattabyte