我要发帖 回复

正式会员

6

主题

35

积分

0

专家分

:

私信
发表时间 : 2008-9-24 14:04:02 | 浏览 : 1499    评论 : 0
rt,看了一些资料 用wglUseFontOutlines来显示中文字体,在自己的一个MFC openGL框架程序中测试成功,想转移到vega下用回调函数实现显示出现问题
调用显示列表时无显示
我的代码如下:
//制作显示列表子函数
static int num=0;      //全局变量,保存显示列表数目
static unsigned short*  plist=NULL;    //全局变量,保存各个显示列表序号
void CVisSceneView::makeText(CString str)
{
    int zlist;
   unsigned short* list=new unsigned short[str.GetLength()];  //临时保存显示列表序号
for(int i=0;i<str.GetLength();i++){
  unsigned char uChar=str;
  unsigned short dword;
  if(::IsDBCSLeadByte(uChar))
   dword=MAKEWORD(str[++i],uChar);   //若为双字节则多处理一个字节
  else
   dword=(WORD)uChar;
  zlist=glGenLists(1);
  wglUseFontOutlines(wglGetCurrentDC(),dword,1,zlist,0.0f,0.0f,1,NULL);
  list[num++]=zlist;
}
    plist=new unsigned short[num];
memcpy(plist,list,num*sizeof(unsigned short));
}
//在主循环之前加载回调函数
void CVisSceneView::postConfiged()
{
    vgAddFunc(m_pChan,VGCHAN_POSTDRAW,DrawCallback,NULL);
}
//执行回调函数
void DrawCallback(vgCommon* chan,void* data){
   GLint matmode;
GLfloat projmat[16];

pfPushState();
pfDisable(PFEN_TEXTURE);
pfDisable(PFEN_FOG);
pfDisable(PFEN_LIGHTING);
pfTransparency(PFTR_FAST);
   
glDisable(GL_DEPTH_TEST);
glGetIntegerv(GL_MATRIX_MODE,&matmode);
    glMatrixMode(GL_PROJECTION);
glGetFloatv(GL_PROJECTION_MATRIX,projmat);
glMatrixMode(matmode);
pfPushIdentMatrix();
glGetIntegerv(GL_MATRIX_MODE,&matmode);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,1280,0,1024);
glColor3f(1.0,1.0,0.0);
/*char text[256];
strcpy(text,"Welcome to vega!");
vgFontSize(15,20);
vgFontPos(40,20,0);
    vgDrawFont(text);    */

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(40,20,0);
glCallLists(num,GL_UNSIGNED_SHORT,plist);
glMatrixMode(matmode);
pfPopMatrix();
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projmat);
glMatrixMode(matmode);
glEnable(GL_DEPTH_TEST);
pfPopState();
}
中间注释部分是用vgFont显示英文字体,能正常显示
为什么调用显示列表不能显示?  请高手指教我错哪儿了?

makeText在OnCreate函数中已调用,设置要显示的字符内容

最近VR访客

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-19 05:14 AM

返回顶部