需要帮助使用 glRasterPos3f (openGL)
Need help using glRasterPos3f (openGL)
我正在尝试使用 OpenGL 创建游戏。我的游戏运行良好,但我想加分。在那里,出现了两个问题:
- 屏幕开始亮了(我觉得是
glutPostRedisplay()
代码位置的问题)
- 分数在屏幕上移动
如果您对我如何修复此问题有任何想法,请随时回答:D。
显示分数的函数代码:
void drawBitmapText(char *string) {
char *c;
glRasterPos3f(1,1,-1);
for (c=string; *c != '[=10=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
}
void AffichageScore(void){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
std::string scoreSTR = std::to_string(score);
scoreSTR = "Score : "+scoreSTR;
int len = scoreSTR.length();
char scoreArray[len+1];
std::strcpy(scoreArray, scoreSTR.c_str());
drawBitmapText(scoreArray);
glutPostRedisplay();
}
由glRasterPos
设置的坐标由当前模型视图和投影矩阵转换。
使用glWindowPos
直接更新当前光栅位置的x和y坐标,不应用当前模型视图和投影矩阵。但请注意,glWindowPos
的坐标必须是 window 坐标:
void drawBitmapText(char *string) {
char *c;
glWindowPos3f(0, 0, 0);
for (c=string; *c != '[=10=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
}
或者,当调用 glRasterPos
时,您可以通过 Identity matrix 设置当前矩阵:
void drawBitmapText(char *string) {
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRasterPos3f(1,1,-1);
char *c;
for (c=string; *c != '[=11=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
我正在尝试使用 OpenGL 创建游戏。我的游戏运行良好,但我想加分。在那里,出现了两个问题:
- 屏幕开始亮了(我觉得是
glutPostRedisplay()
代码位置的问题) - 分数在屏幕上移动
如果您对我如何修复此问题有任何想法,请随时回答:D。
显示分数的函数代码:
void drawBitmapText(char *string) {
char *c;
glRasterPos3f(1,1,-1);
for (c=string; *c != '[=10=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
}
void AffichageScore(void){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
std::string scoreSTR = std::to_string(score);
scoreSTR = "Score : "+scoreSTR;
int len = scoreSTR.length();
char scoreArray[len+1];
std::strcpy(scoreArray, scoreSTR.c_str());
drawBitmapText(scoreArray);
glutPostRedisplay();
}
由glRasterPos
设置的坐标由当前模型视图和投影矩阵转换。
使用glWindowPos
直接更新当前光栅位置的x和y坐标,不应用当前模型视图和投影矩阵。但请注意,glWindowPos
的坐标必须是 window 坐标:
void drawBitmapText(char *string) {
char *c;
glWindowPos3f(0, 0, 0);
for (c=string; *c != '[=10=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
}
或者,当调用 glRasterPos
时,您可以通过 Identity matrix 设置当前矩阵:
void drawBitmapText(char *string) {
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRasterPos3f(1,1,-1);
char *c;
for (c=string; *c != '[=11=]'; c++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *c);
}
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}