gpt4 book ai didi

opengl - glutBitmapString 什么都不显示

转载 作者:行者123 更新时间:2023-12-04 04:55:03 26 4
gpt4 key购买 nike

我将使用 freeglut 函数 glutBitmapString 在屏幕上显示 FPS,但它什么也没显示。这是我的代码。有没有人能弄清楚问题出在哪里?

void PrintFPS()
{
frame++;
time=glutGet(GLUT_ELAPSED_TIME);
if (time - timebase > 100) {
cout << "FPS:\t"<<frame*1000.0/(time-timebase)<<endl;
char* out = new char[30];
sprintf(out,"FPS:%4.2f",frame*1000.0f/(time-timebase));
glColor3f(1.0f,1.0f,1.0f);
glRasterPos2f(20,20);
glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24,(unsigned char* )out);


timebase = time;
frame = 0;
}
}

void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 0.5f };
GLfloat vYellow[] = {1.0f,1.0f,0.0f,1.0f};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vYellow);
//triangleBatch.Draw();
squareBatch.Draw();
PrintFPS();
glutSwapBuffers();
}

它应该在屏幕左上角显示 FPS

最佳答案

glRasterPos提供的职位被视为一个顶点,并由当前的模型 View 和投影矩阵进行转换。在您的示例中,您将文本指定为(20,20),我猜它应该是屏幕(实际上是视口(viewport))坐标。

如果您正在渲染 3D 几何图形,尤其是使用透视投影,您的文本可能会被剪掉。但是,(至少)有两个简单的解决方案(按代码简单的顺序呈现):

  • 使用 glWindowPos 之一函数而不是 glRasterPos .此函数绕过模型 View 和投影转换。
  • 使用 glMatrixMode , glPushMatrix , 和 glPopMatrix临时切换到窗口坐标进行渲染:
    // Switch to window coordinates to render
    glMatrixMode( GL_MODELVIEW );
    glPushMatrix();
    glLoadIdentity();

    glMatrixMode( GL_PROJECTION );
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D( 0, windowWidth, 0, windowHeight );

    glRasterPos2i( 20, 20 ); // or wherever in window coordinates
    glutBitmapString( ... );

    glPopMatrix();
    glMatrixMode( GL_MODELVIEW );
    glPopMatrix();
  • 关于opengl - glutBitmapString 什么都不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873561/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com