2010-07-02 28 views
1

我有一個3x9重複節的紋理。我不想存儲紋理所具有的tesselated 1920x1080圖像,我更願意在代碼中生成它,以便在其他分辨率下正確應用它。關於如何做到這一點的任何想法?原有的質感是在這裏:http://img684.imageshack.us/img684/6282/matte1.png如何在OpenGL的GLSL中重複3x9紋理?

我知道,質地是一個非冪的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() 

任何想法將不勝感激。

謝謝!

回答

4

幾乎就像你會用固定管一樣。在設置採樣器均勻之前,將綁定紋理的包裝模式設置爲重複,並且在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)就可以。