2016-12-02 1 views
0

Использование C++ и OpenGL (с GLUT) Я пытаюсь отобразить динамический текст на экране пользователя. Текст, который я пытаюсь отобразить, - это время, затраченное на вычисление всего необходимого для рендеринга набора Мандельброта.Есть ли более простой способ отображения текста с использованием C++ и OpenGL?

До сих пор мне удалось сделать это таким образом:

std::ostringstream stream; 
stream << "Time: " << end_time-start_time; 
const std::string& tmp = stream.str(); 
const char* cstr = tmp.c_str(); 
strcpy(message, cstr); 
int len = (int) strlen(message); 
glPushMatrix(); 
glTranslatef(20.0, 80.0, 0.0); 
glScalef(0.1, 0.1, 0.0); 
glColor3f(1.0,1.0,1.0); 
for (int i = 0; i < len; i++) { 
    glutStrokeCharacter(GLUT_STROKE_ROMAN, message[i]); 
} 
glPopMatrix(); 

Поскольку я не очень familliar с C++ и OpenGL я не мог понять, более лаконичный способ сделать это, но это мне кажется быть слишком сложным, чтобы отображать только одно сообщение.

Можете ли вы порекомендовать лучший или менее сложный способ сделать это? Любые советы или критика приветствуются.

+2

может просто использовать консоль для вывода или показать его на заголовке окна? –

+0

вы можете ожидать, что что-то 2D будет довольно сложным, поскольку opengl предназначен для 3D –

+1

Это выглядит довольно просто по сравнению с тем, что делает избыток под капотом для вас. Лично я бы выбрал несколько интерфейсов более высокого уровня, чем даже избыток, если у вас есть какая-то реальная работа. – Flexo

ответ

2

Это, вероятно, более лаконичным (C++ 11):

void showTime() 
{ 
    glPushMatrix(); 
    glTranslatef(20.0, 80.0, 0.0); 
    glScalef(0.1, 0.1, 0.0); 
    glColor3f(1.0,1.0,1.0); 
    for (auto ch : std::to_string(end_time - start_time)) 
    { 
    glutStrokeCharacter(GLUT_STROKE_ROMAN, ch); 
    } 
    glPopMatrix(); 
}