2011-02-07 102 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);