Glut字符显示功能问题opengl

时间:2016-02-21 09:21:31

标签: c++ opengl glut

我正面临着像这张照片一样在帧上进行角色显示的问题。在这张照片中画了一个红色的圆圈,上面写着一些字符。

Sample 1 image

除了字符显示功能外,我的代码工作正常。我不知道我在glRotatef glTranslatef glScalef这些函数中给出的坐标,以根据图片显示字符。

这是代码:

using namespace std;

float x = 1, y = 1;

void init(void) {

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

}


void drawCircle(float pointX, float pointY, float Radius, int PointsDrawn)
{

    glBegin(GL_TRIANGLE_FAN);

    for (int i = 0; i < PointsDrawn; i++)
    {
        float theta = i * (2.0f * (float)M_PI / PointsDrawn);
        float x = Radius * cos(theta);
        float y = Radius * sin(theta);
        glVertex2f(x + pointX, y + pointY);
    }
    glEnd();
}


  void print(float x, float y, char* text)
{
    glPushMatrix();
    glScalef(5,5,2);
    glTranslatef(x, y, 0);
    glutStrokeCharacter(GLUT_STROKE_ROMAN, *text);
    glPopMatrix();
}


void display()
{

    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f,0.0f,0.0f);
    drawCircle(0.0f, 0.0f, 0.80f, 360);


glColor3f(1.0f,1.0f,1.0f);
print(-0.5f, 0.5f, "D");

    glFlush();

}


void reshapeFunc(int width, int height) {
    if (height == 0) {
        height = 1;

    }
    else {
        height = height;
    }


    float aspectRatio = (GLfloat)width / (GLfloat)height;


    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    if (width <= height)
        glOrtho(-x, x, -y / aspectRatio, y / aspectRatio, -1.0, 1.0);
    else
        glOrtho(-x*aspectRatio, x*aspectRatio, -y, y, -1.0, 1.0);
}




int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitWindowSize(590, 590);
    glutInitWindowPosition(50, 50);
    glutCreateWindow("Frame");
    init();
    glutDisplayFunc(&display);
    glutReshapeFunc(&reshapeFunc);
    glutMainLoop();
    return EXIT_SUCCESS;


}

1 个答案:

答案 0 :(得分:1)

首先,你的问题没有得到很好的定义。我假设你想用你的代码做第一张照片。

在您的代码中,您正在绘制&#34; D&#34;和&#34; E&#34;在相同的位置并缩放输出。要实现最终输出,您必须翻译并旋转所有字符。您可以通过稍微修改当前的打印功能来完成。

首先将打印内的1/152的scalef值更改为1/552。添加带参数的rotatef。然后使用相关位置和旋转参数调用print函数。有关用法,请参阅函数的opengl文档。

编辑:

这是我的代码:

void print(float x, float y, float z,char* text) { 
    glPushMatrix();
    glTranslatef(x, y, 0);
    glScalef(1/552.0,1/552.0,1);
    glRotatef(z,0,0,1);
    glutStrokeCharacter(GLUT_STROKE_ROMAN, *text);
    glPopMatrix();
}


void display()
{

    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f,0.0f,0.0f);
    drawCircle(0.0f, 0.0f, 0.80f, 360);
    glColor3f(1.0f,1.0f,1.0f);
    char *ch="DEVELOP";
    for (int i = 0; i <7; ++i)
    {
        float rad=M_PI/180;
        double ang=135-15*i;
        double ang_letter=45-15*i;
        print(0.6*cos(ang*rad), 0.6*sin(ang*rad),ang_letter,ch+i);
    }
    glFlush();
}