Отображение переменных в GLUT - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь отобразить значение переменной внутри моего окна GLUT.

Возможно, что-то вроде функции отображения текста.

Функция отображения текста:

renderBitmapString(0, 0.8, GLUT_BITMAP_TIMES_ROMAN_24, "hello");

Определено как:

    void renderBitmapString(float x, float y, void *font, char *string) 
{  
  char *c;
  glRasterPos2f(x,y);
  for (c=string; *c != '\0'; c++) 
  {
    glutBitmapCharacter(font, *c);
  }
}

Спасибо

Ответы [ 3 ]

4 голосов
/ 07 февраля 2011

Вы можете напечатать переменную в char [] с помощью sprintf,

char buffer[256];
sprintf(buffer,"%s", myVariable);

, а затем вызвать для нее renderBitmapString.

0 голосов
/ 28 мая 2017

Вы можете определить функцию и переменные следующим образом:

// global variables
int text_x = 0, text_y = 0;
char text[] = "Text location:";

// to display strings with variables
void print_str(int x, int y, void *font, char *string, ...)
{
    int len, i;

    va_list st;
    va_start(st, string);
    char str[1024];
    vsprintf_s(str, string, st);
    va_end(st);

    glRasterPos2f(x, y);
    len = (int)strlen(str);
    for (i = 0; i < len; i++)
        glutBitmapCharacter(font, str[i]);
}

, чем использовать функцию, как показано ниже:

print_str(text_x, text_y, GLUT_BITMAP_TIMES_ROMAN_24, "%s %d x %d", text, text_x, text_y);
0 голосов
/ 08 мая 2011

Во-первых, обычную строку C ++ можно превратить в символ * с помощью c_str: http://www.cplusplus.com/reference/string/string/c_str/ Однако обратите внимание, что это дает вам const char *, поэтому вам придется использовать const_cast ().

string a ("Hello");
renderBitmapString(0, 0.8, GLUT_BITMAP_TIMES_ROMAN_24, const_cast<char*>(a.c_str()));

Довольно уродливый ИМО.

Во-вторых, я бы не использовал char * в программе на C ++. Вместо этого вы можете изменить свою процедуру несколькими способами. Лично я бы использовал строковый итератор.

void renderBitmapString(float x, float y, void *font, string str) 
{
  glRasterPos2f(x,y);
  for (string::iterator c = (&str)->begin(); c != (&str)->end(); ++c) 
  {
    glutBitmapCharacter(font, *c);
  }
}

string a ("Hello");
renderBitmapString(0, 0.8, GLUT_BITMAP_TIMES_ROMAN_24, a);
...