2014-12-30 44 views
0

我試圖呈現一個字符串,畫面渲染,我不能讓它的工作文本不GLUT

我用freeglutvisual studio 2013。這是我的glutinit

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA); // Double buffering, RGB format 
glutInitWindowSize(width, heigth); 
glutInitWindowPosition(0, 0); 
glutCreateWindow("Project Demeter"); 
glClearColor(1.0, 1.0, 1.0, 1.0); 

glColor3f(1.0, 1.0, 1.0); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0.0, width, heigth, 0.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glEnable(GL_BLEND); 
glEnable(GL_POINT_SMOOTH); 
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); 

和我的文字圖畫:

void text::draw() 
{ 
    glColor3ub(_color[0], _color[1], _color[2]); 
    glRasterPos2f(_x, _y); 
    glDisable(GL_TEXTURE); 
    glDisable(GL_TEXTURE_2D); 
    for (char& c : _str) 
    { 
     glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, c); 
    } 
} 

然而,沒有什麼是畫在屏幕上,當我創建一個文本,例如:

float clr[3] = { 0, 0, 0 }; 
text* txt = new text(&DrawList, "test1234", clr, 600, 600); 

沒有人知道是什麼即時通訊做錯了,我該如何解決這個問題?

編輯:請求將構造:

text::text(std::list<item*>* BaseList, const string str, const float color[3], int x, int y) 
:item(BaseList) 
{ 
    if (str == "") 
    { 
     assert(0); 
    } 

    _str = str; 

    _x = x; 
    _y = y; 

    if (!color) {  // When a null pointer is passed to this function 
     _color[0] = 0;// black is used 
     _color[1] = 0; 
     _color[2] = 0; 

    } 
    else { //else copy it over 
     copy_array(color, _color); 
    } 
} 

EDIT2:所以我測試了它在Windows 8機器上,並且它的工作呢?跆拳道?即時通訊使用W7。這很奇怪。

+1

發佈您的文本ctor代碼。 – Anonymous

+0

在這裏播放Captain明顯,但是你在繪製幀的結尾調用'glutSwapBuffers()'嗎?背景顏色是否顯示? –

+0

@ReetoKoradi是的,我使用它,但沒有顯示在這裏,是的一切都顯示出來(線條和像素) – WillieWonka

回答

0

使用C++字符串並遍歷字符串來代替繪製每個字母。如果這沒有幫助,那麼在渲染文本之前嘗試禁用混合或光照。在將它放入「文本」類之前,您是否設法使用glutBitmapCharacter()函數顯示文本?如果是這樣的話,你可能在文本類中的數據保存方面存在問題。同樣,我建議在文本類中使用字符串對象(不是char *),並使用string :: iterator循環訪問字符串。


我不是我的計算機的時刻,但我會在稍後發佈上一些代碼,因爲我在一個類似的項目工作,並有文字等啓動和運行。

我注意到你正在使用glortho2d並且你使用'raster2d',但是你在繪製文本之前沒有禁用深度測試。我在glortho環境中使用'raster3f',它允許分層文本和對象等,並且不需要禁用深度測試等。

此外,在您的文本構造函數中,您將指針傳遞給「std :: list *「但不是通過自動引用傳遞的STL容器?

稍後當我在我的計算機上時,我會更有幫助

+0

也許我應該指定這個,但我已經在做一個C++字符串方法。 for循環是一種通過C++字符串進行迭代的C++ 11方式 – WillieWonka