2011-07-30 42 views
4

比方說,我有一種方法獲得GLuint紋理作爲參數,我想渲染它的一部分。想想一個瓷磚集,例如,我希望能夠加載瓷磚集並在我加載我的關卡時渲染它的部件(瓷磚)。C++ Opengl呈現圖像的一部分

如果我以某種方式能夠從要繪製的圖塊集的像素座標中定義高度,寬度,posX和posY,那將是最優的。

我一直在嘗試幾個小時,任何幫助將不勝感激。

void Render::draw(GLuint texture, float posX, float posY, float sizeX, float sizeY) { 

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
    glAlphaFunc(GL_GREATER,0.1f); 

    glBindTexture(GL_TEXTURE_2D, texture); 
    glPushMatrix(); 
    glTranslatef(posX,posY,0); 
    glBegin(GL_QUADS); 

    //Bottom-left vertex (corner) 
    glTexCoord2i(0, 0); 
    glVertex2f(-sizeX,-sizeY); 
    //Bottom-right vertex (corner) 
    glTexCoord2i(1, 0); 
    glVertex2f(sizeX,-sizeY); 
    //Top-right vertex (corner) 
    glTexCoord2i(1, 1); 
    glVertex2f(sizeX,sizeY); 
    //Top-left vertex (corner) 
    glTexCoord2i(0, 1); 
    glVertex2f(-sizeX,sizeY); 

    glEnd(); 
    glPopMatrix(); 
    glDisable(GL_BLEND); 
} 

回答

3

你使用glTexCoord功能如下:

簡體版我目前如何繪製紋理。
例如,如果地形設置中包含4瓦,而要顯示左上角[*]瓷磚,你會做這樣的事情:

glTexCoord2f(0, 0); 
glVertex2f(-sizeX,-sizeY); 
glTexCoord2f(0.5, 0); 
glVertex2f(sizeX,-sizeY); 
glTexCoord2f(0.5, 0.5); 
glVertex2f(sizeX,sizeY); 
glTexCoord2i(0, 0.5); 
glVertex2f(-sizeX,sizeY); 

[*]我不記得是怎麼座標工作正確,但在您的代碼中測試很容易。

+0

是的,但這些值從0到1,你知道任何方式來定義通過使用像素座標的位置嗎? – Sane

+3

我終於明白了!對於那些有興趣的人,我找到了解決方案:http://www.gamedev.net/topic/559980-opengl-and-2d-tiles/ – Sane