У меня есть текстура с 3х9 повторяющимся участком. Я не хочу сохранять изображение с теснением 1920x1080, которое у меня есть для текстуры, я бы скорее сгенерировал его в коде, чтобы он мог корректно применяться в других разрешениях. Любые идеи о том, как я могу это сделать? Исходная текстура находится здесь: http://img684.imageshack.us/img684/6282/matte1.png
Я знаю, что текстура является не-power-of-2, поэтому я должен повторять в шейдере, что я делаю:
uniform sampler2D tex;
varying vec2 texCoord;
void main() {
gl_FragColor = texture2D(tex, mod(texCoord, vec2(3.0, 9.0)) * vec2(0.75, 0.5625));
}
Вот как я рисую квад:
glBegin(GL_QUADS)
glColor4f(1.0, 1.0, 1.0, 1.0)
glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.topLeft().x(), self.widgetPhysicalRect.topLeft().y())
glVertex2f(-1.0, 1.0)
glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.topRight().x(), self.widgetPhysicalRect.topRight().y())
glVertex2f(1.0, 1.0)
glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.bottomRight().x(), self.widgetPhysicalRect.bottomRight().y())
glVertex2f(1.0, -1.0)
glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.bottomLeft().x(), self.widgetPhysicalRect.bottomLeft().y())
glVertex2f(-1.0, -1.0)
glEnd()
Будем очень благодарны за любые идеи.
Спасибо!
Скорее всего, вы сделали бы это с фиксированной трубой. Установите режим привязки связанной текстуры, чтобы повторить перед установкой однородности сэмплера, а координаты текстуры вне диапазона 0-1 повторяют текстуру.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
В вашем случае координаты текстуры будут равны s = 0-640 и t = 0-120. Фрагментный шейдер не нуждается в чем-то особенном, только нормальный texture2D(tex, texCoord)
будет делать.