2013-05-29 70 views
0

這是我到目前爲止有:OpenGl - 如何重複紋理?

Rectangle::Rectangle(int x, int y) 
    { 
    sizeX_ = x * CASE; 
    sizeY_ = y * CASE; 
    texture_ = gdl::Image::load("./ressources/floor.jpg"); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    } 

    void Rectangle::draw() 
{                   
    texture_.bind(); 
    glBegin(GL_QUADS); 

    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(0.0f, 0.0f, 0.0f); 

    glTexCoord2f(sizeX_/CASE, 0.0f); 
    glVertex3f(sizeX_, 0.0f, 0.0f); 

    glTexCoord2f(0.0f, sizeY_/CASE); 
    glVertex3f(sizeX_, 0.0f, sizeY_); 

    glTexCoord2f(sizeX_/CASE, sizeY_/CASE); 
    glVertex3f(0.0f, 0.0f, sizeY_); 

    glEnd(); 
    } 

構造函數的情況下,地圖的大小。例如:(10, 10)。真實尺寸將爲(10 * CASE),其中CASE = 400

但是這不是正確地重複紋理。紋理似乎減少(好點),並從左上角點到右下角點。

我做錯了什麼?

+0

'CASE','sizeX_'和'sizeY_'如何定義?你在做整數除法嗎? – Shahbaz

+0

'CASE'是一個宏,'SizeX_'和'sizeY_'是整數。 – Elfayer

+0

你檢查了預測嗎?如果您希望像素座標比率爲1,則應將投影設置爲正交,併爲視口使用正確的大小 –

回答

5

glTexParameter適用於當前綁定的紋理。它不全局設置參數。這意味着您需要在調用此函數之前綁定紋理:

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