游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2675|回复: 2

关于OpenGL文字显示的一个问题

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-1-12 11:04:00 | 显示全部楼层 |阅读模式
我写一个Font类,头文件是:
#include <stdio.h>
class Font  
{
public:
        Font();
        virtual ~Font();
        GLuint Base;                                                                       
        void drawString(int x,int y,char* str,...);                                               
};
源文件是:
#include "stdafx.h"
#include "Font.h"
#include "OpenGL.h"
extern OpenGL opengl;
Font::Font()
{
                                                       
}
Font::~Font()
{

}

void Font::drawString(int x,int y,char* str,...){       
        char text[256];                                                                        va_list argList;                                                                        if(str==NULL)        return;                                                                va_start(argList,str);                                                                vsprintf(text,str,argList);                                                       
        va_end(argList);
        Base=glGenLists(96);                                                       
        wglUseFontBitmaps(opengl.hDC,32,96,Base);       
        glDisable(GL_TEXTURE_2D);                                                       
        glDisable(GL_LIGHTING);                                                       
        glPushAttrib(GL_LIST_BASE);                                                       
        glListBase(Base-32);                                                                glColor3f(1.0f,1.0f,1.0f);                                                                glRasterPos2i(x,y);                                                                        glCallLists(strlen(text),GL_UNSIGNED_BYTE,text);       
        glPopAttrib();                                                               
        glEnable(GL_LIGHTING);                                                       
        glEnable(GL_TEXTURE_2D);          
          glDeleteLists(Base,96);                                                               
}
后来我感觉这个drawString方法效率太差了,于是把Base=glGenLists(96);和wglUseFontBitmaps(opengl.hDC,32,96,Base);这两行挪到构造函数里,于是源文件改为:
#include "stdafx.h"
#include "Font.h"
#include "OpenGL.h"
extern OpenGL opengl;
Font::Font()
{
          Base=glGenLists(96);                                                       
        wglUseFontBitmaps(opengl.hDC,32,96,Base);                                                       
}
Font::~Font()
{
          glDeleteLists(Base,96);
}

void Font::drawString(int x,int y,char* str,...){       
        char text[256];                                                                        va_list argList;                                                                        if(str==NULL)        return;                                                                va_start(argList,str);                                                                vsprintf(text,str,argList);                                                       
        va_end(argList);
        glDisable(GL_TEXTURE_2D);                                                       
        glDisable(GL_LIGHTING);                                                       
        glPushAttrib(GL_LIST_BASE);                                                       
        glListBase(Base-32);                                                                glColor3f(1.0f,1.0f,1.0f);                                                                glRasterPos2i(x,y);                                                                        glCallLists(strlen(text),GL_UNSIGNED_BYTE,text);       
        glPopAttrib();                                                               
        glEnable(GL_LIGHTING);                                                       
        glEnable(GL_TEXTURE_2D);                                                                          
}
可是这样子就显示不出来文字了,请问难道我这样修改不行吗?

0

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2012-1-13 01:21:00 | 显示全部楼层

Re: 关于OpenGL文字显示的一个问题

不要在constructor里做除了初始化以外的事情。

wglUseFontBitmaps(opengl.hDC,32,96,Base)在Font还没有构建完成前就使用到了Base。

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2012-1-13 08:43:00 | 显示全部楼层

Re: Re: 关于OpenGL文字显示的一个问题

cxd2436946: Re: 关于OpenGL文字显示的一个问题

不要在constructor里做除了初始化以外的事情。

wglUseFontBitmaps(opengl.hDC,32,96,Base)在Font还没有构建完成前就使用到了Base。


谢谢!看来这个C++和Java不大一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-2 11:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表