2011-02-07 56 views
-1

我試圖在我的GLUT窗口中顯示一個變量的值。在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); 
    } 
} 

謝謝

回答

4

可以打印可變進一個char []與sprintf,

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

然後調用renderBitmapString就可以了。

+1

這是假設你的MYVARIABLE是char []串。如果你的變量是一個int,使用「%d」而不是「%s」。如果是浮動使用「%f」等。 – levis501 2011-02-07 01:25:30

0

首先,一個普通的C++字符串可以變成使用c_str一個char *:http://www.cplusplus.com/reference/string/string/c_str/但是請注意,這給你一個常量的char *,所以你必須用const_cast()。

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

很醜陋的IMO。

其次,我不會在C++程序中使用char *。相反,您可以通過多種方式修改您的程序。就個人而言,我會使用字符串迭代器。

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); 
0

您可以定義函數和變量這樣的:

// 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);