OpenGL 字体颜色问题
生活随笔
收集整理的這篇文章主要介紹了
OpenGL 字体颜色问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
剛寫了一個OpenGL字體顯示類, 發現顏色總是不對, 部分代碼如下:
????//繪制文字????glPushAttrib(GL_LIST_BIT?|?GL_COLOR_BUFFER_BIT?|?GL_ENABLE_BIT);
????glDisable(GL_LIGHTING);
????//文字位置
????if(m_screen)
????{
????????double?x=m_x,y=m_y;
????????switch(m_layout)
????????{
????????case(LEFT_BOTTOM):break;
????????case(LEFT_TOP):///左上角
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(RIGHT_BOTTOM):///右下角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????break;
????????case(RIGHT_TOP):///右上角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(LEFT_CENTER):///左側中心
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(TOP_CENTER):///頂部中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(BOTTOM_CENTER):///底部中性
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????break;
????????case(RIGHT_CENTER):///右側中心
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(CENTER):///屏幕中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????}
????????glWindowPos2d(x,y);
????}
????else
????????glRasterPos3d(m_x,m_y,m_z);
????
????//文字顏色,必須在glWindowPos2d和glRasterPos3d前
????glColor4fv(Color);?//<------
????//調用顯示列表
????glListBase(m_base);
????glCallLists(m_list_len,GL_UNSIGNED_INT,m_lists);
????glPopAttrib();
?
百思不得其解, 翻開Red Book找到了答案:
? 8.1.3 選擇位圖的顏色
? ... 光柵顏色狀態變量被設置為調用函數glRasterPos*()時的顏色, ...
?
顯然只需要調整glColor*和 glRasterPos*的位置即可, 修改后的代碼如下:
????glPushAttrib(GL_LIST_BIT?|?GL_COLOR_BUFFER_BIT?|?GL_ENABLE_BIT);
????glDisable(GL_LIGHTING);
????//文字顏色,必須在glWindowPos2d和glRasterPos3d前
????glColor4fv(Color);
????//文字位置
????if(m_screen)
????{
????????double?x=m_x,y=m_y;
????????switch(m_layout)
????????{
????????case(LEFT_BOTTOM):break;
????????case(LEFT_TOP):///左上角
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(RIGHT_BOTTOM):///右下角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????break;
????????case(RIGHT_TOP):///右上角
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(LEFT_CENTER):///左側中心
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(TOP_CENTER):///頂部中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?m_parent->GetGLWindow()->GetSize().y-m_y;
????????????break;
????????case(BOTTOM_CENTER):///底部中性
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????break;
????????case(RIGHT_CENTER):///右側中心
????????????x?=?m_parent->GetGLWindow()->GetSize().x-m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????case(CENTER):///屏幕中心
????????????x?=?0.5*m_parent->GetGLWindow()->GetSize().x+m_x;
????????????y?=?0.5*m_parent->GetGLWindow()->GetSize().y+m_y;
????????????break;
????????}
????????glWindowPos2d(x,y);
????}
????else
????????glRasterPos3d(m_x,m_y,m_z);
????//調用顯示列表
????glListBase(m_base);
????glCallLists(m_list_len,GL_UNSIGNED_INT,m_lists);
????glPopAttrib();
轉載于:https://www.cnblogs.com/codezhang/archive/2009/06/20/1507320.html
總結
以上是生活随笔為你收集整理的OpenGL 字体颜色问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GridView分页(第一页、上一页、下
- 下一篇: 网络存储导论第七章:重要系统灾备方法