|
|
有那位清楚这个问题,请指点! 感激不尽!![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] 望各位指点!! 我还是第一次来,多多指教! |
|