这是我的第一个使用OpenGL的程序。我写了一个非常简单的文本模块来写入屏幕。它加载角色纹理并渲染它。
我知道我的所有角色都应该有一个很大的纹理,但这次我为每个角色使用了一个64x64纹理。
当相机没有倾斜时,它可以正常工作。但是一旦我应用转换,一些字符就无法正确呈现。这是发生的事情:
我正在使用此代码呈现文本:
typedef struct {
Renderable renderable;
const char *buffer;
float r, g, b;
float x, y, z;
float x_scale, y_scale;
} Text;
static bool render(void *text_ptr, game_clock_t time)
{
Text *text = text_ptr;
float position = text->x;
glShadeModel(GL_SMOOTH);
glEnable(GL_TEXTURE_2D);
for(unsigned int i = 0; text->buffer[i] != '\0'; ++i){
glColor3f(text->r, text->g, text->b);
glBindTexture(GL_TEXTURE_2D, textures[text->buffer[i]].id);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex3f(position, text->y, -text->z);
glTexCoord2f(1.0f, 1.0f); glVertex3f(position + text->x_scale, text->y, -text->z);
glTexCoord2f(1.0f, 0.0f); glVertex3f(position + text->x_scale, text->y + text->y_scale, -text->z);
glTexCoord2f(0.0f, 0.0f); glVertex3f(position, text->y + text->y_scale, -text->z);
glEnd();
position += (float)36/64 * text->x_scale;
}
return false;
}
我在整个游戏中使用的转换:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 16.f / 9.f, 1, 128);
gluLookAt(15, 8, 15, 5, 5, -30 / 2, 0, 1, 0);
glTranslatef(-5, 2, 0);
为什么会这样?我该如何解决?