我寫了一個小型的平鋪遊戲引擎,OpenGL和C,我似乎無法弄清楚問題是什麼。我的主循環是這樣的:OpenGL 2D紋理渲染過大,glViewport破損
void main_game_loop()
{
(poll for events and respond to them)
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
draw_block(WALL, 10, 10);
}
draw_block:
void draw_block(block b, int x, int y)
{
(load b's texture from a hash and store it in GLuint tex)
glPushMatrix();
glTranslatef(x, y, 0);
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_QUADS);
//BLOCK_DIM is 32, the width and height of the texture
glTexCoord2i(0, 0); glVertex3f(0, 0, 0);
glTexCoord2i(1, 0); glVertex3f(BLOCK_DIM, 0, 0);
glTexCoord2i(1, 1); glVertex3f(BLOCK_DIM, BLOCK_DIM, 0);
glTexCoord2i(0, 1); glVertex3f(0, BLOCK_DIM, 0);
glEnd();
glPopMatrix;
}
初始化函數:(main_game_loop之前調用)
void init_gl()
{
glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0, 0, 0, 0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
當運行,這顯示黑屏。但是,如果我刪除glViewport調用,它看起來會顯示紋理,但很大,並且在窗口的角落。屏幕截圖:
紋理被正確繪製,因爲如果我通過一個巨大因子向外擴展,我可以看到整個圖像。 Y軸也似乎從我在gluOrtho2D調用中使用的內容(通過將事件添加到圖像的x/y座標或從y座標中減去會導致圖像向下移動中發現事件中發現)中翻轉出來。我開始感到沮喪,因爲這是我能想到的最簡單的例子。我正在使用SDL,並將SDL_OPENGL傳遞給SDL_SetVideoMode。這裏發生了什麼?
不是答案,但它提醒我已將SCREEN_WIDTH和SCREEN_HEIGHT設置爲0(用於最大化窗口),並且我忘記將它們設置爲初始化代碼中的實際尺寸。 – chameco
數字。我不*那*通靈:)。 – aib