游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2925|回复: 3

求助: 怪问题~ 文字无法渲染到屏幕坐标上!!

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-12-8 02:09:00 | 显示全部楼层 |阅读模式
有那位清楚这个问题,请指点! 感激不尽!![em6] [em6] [em6]

具体渲染文字的代码我主要参考了 NEHE lesson 13 和 《学opengl编3d游戏》,其实都差不多,我直接参照使用了后者的代码,如下:

void CGLFont::entext( float x,float y, LPCTSTR str, HFONT hFont,
                                          float r, float g, float b) //平面字符显示,不支持汉字。
{         HDC hdc = wglGetCurrentDC();        //获取设置场景
        SelectObject(hdc, hFont);           //设置字体
        unsigned int Base = glGenLists(96); //创建大小为96显示列表,存放字符位图
        wglUseFontBitmaps(hdc, 32, 96,Base);//创建位图字体
        glDisable(GL_TEXTURE_2D);           //不使用贴图
        glDisable(GL_LIGHTING);             //不使用光照
        glPushAttrib(GL_LIST_BIT);          //保存显示列表位属性
        glColor3f(r,g,b);                   //颜色
        glRasterPos2f(x/100, y/100);        //平面定位
                glListBase(Base - 32);          //从显示列表开始
                glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); //绘制显示列表
        glPopAttrib();                      //恢复显示列表属性
        glEnable(GL_LIGHTING);              //使用贴图
        glEnable(GL_TEXTURE_2D);            //使用光照
        glDeleteLists(Base, 96);            //删除显示列表
}

按道理说,只要定义好 hFont, str, glRasterPos2f(x/100, y/100), 文字便能顺利渲染了。
但是现在的问题是, 文字内容确实被渲染出来了,但却不是渲染在屏幕坐标系上! 而是被渲染到了opengl的空间坐标中```[em24] 我反复对比了其他人的代码,找不出原因。
为何相同的代码产生不同的结果?! [em24] [em24]希望各位能指点!!!!

附上我的vc++ 程序代码 和 exe执行文件(在debug目录下)。
操作注释:
-鼠标, 自由视角
-w s a d, 前后左右平移
-q e, 上升下降
-x, 切换第一人称/第三人称视角
-c,第三人称视角下切换 自由/追尾 视角

整个程序才刚开始做,最终是想完成一个城市场景,目前只完成了摄象机的设置,以及画了一些基本的几何体做参照。
目前遇到渲染文字这个极其郁闷的问题,很有挫折感啊~ [em17] 望各位指点!! 我还是第一次来,多多指教!

sf_20051282852.rar

106.9 KB, 下载次数:

1

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2005-12-23 16:03:00 | 显示全部楼层

Re: 求助: 怪问题~ 文字无法渲染到屏幕坐标上!!

void CGLfont::EnterText( GLfloat x, GLfloat y, LPCTSTR str, HFONT hFont,
                                          float r, float g, float b)
{        
        HDC hdc = wglGetCurrentDC();        //acquire current DC
        GLuint Base = glGenLists(96); //create list size of 96 for storing characters bitmap
        wglUseFontBitmaps(hdc, 32, 96,Base);//create bitmap font
        SelectObject(hdc, hFont);           //set font type
        glDisable(GL_TEXTURE_2D);           //disable texture
        glDisable(GL_LIGHTING);             //disable lighting
        glPushAttrib(GL_LIST_BIT);          //back up current attribute
        glColor3f(r,g,b);              //set color
         glLoadIdentity();
    glTranslatef(-(800-x)/800,(-300-y)/600,-1.0f);
        glRasterPos2f(x/100, y/100);        //position on screen
                glListBase(Base - 32);          //start from display list
                glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); //draw to list
        glPopAttrib();                      //retrieve attribute
        glEnable(GL_LIGHTING);              //enable lighting
        glEnable(GL_TEXTURE_2D);            //enalbe texture
        glDeleteLists(Base, 96);            //delete display list
}
sf_2005122316317.jpg

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-12-28 06:12:00 | 显示全部楼层

Re:求助: 怪问题~ 文字无法渲染到屏幕坐标上!!

谢ethanori了!

原来把文字的位置调整一下就好了~ 多谢了~ 多谢了~

但是《学opengl编3d游戏》里的原代码不用位移居然也能正常工作, 这点让人很纳闷,不知ethanori是否也清楚其中原因? 先谢了 !




3

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2006-1-14 18:27:00 | 显示全部楼层

Re:求助: 怪问题~ 文字无法渲染到屏幕坐标上!!

用glWindowPos2i函数替换glRasterPos2f(x/100, y/100);        //position on screen
就可以了啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 05:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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