OpenGL 显示文本

wglUseFontBitmaps
函数显示文字

----使用wglUseFontBitmaps()将ASCII字符装入显示列表,然后使用glCallLists()函数利用显示列表序列显示文本。wglUseFontBitmaps有四个参数,分别是当前使用的DC、从第几个ASCII字符起始装入列表、装入列表的ASCII字符数和起始的列表序号。glListBase()指定glCallLists执行的起始列表序列号。glCallLists()含有三个参数:执行列表序列的个数、列表值的类型和所要显示的文本。注意如果所要显示的文本是字符串,它所提供的信息是相对于起始装入ASCII字符的偏移量,因此最终所显示的ASCII字符是从glListBase()所指定的列表起始号在经过glCallLists()中偏移后的列表,因此wglUseFontBitmaps的从第几个ASCII字符起始装入列表参数、glListBase()指定的 glCallLists执行的起始列表序列号和glCallLists()中的所要显示的文本参数都可以影响最终显示结果。由于显示的是ASCII 字符,因此不能显示汉字。glRasterPos3f函数决定在 OpenGL视景体坐标系下的偏移。具体函数实现如下:

void CMyOpenGlTestView::DrawText()
{
	//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();      
	glTranslatef(1.5f,0.0f,-7.0f);                      // Move Right 1.5 Units And Into The Screen 7.0


	glRotatef(25,1.0f,1.0f,1.0f);                   // Rotate The Quad On The X axis ( NEW )
	glPushMatrix();


	glColor3f(1.0f,1.0f,1.0f);	


	wglUseFontBitmaps(wglGetCurrentDC(),0,255,1000);


	glListBase(1000);
	char* list[] = {"+x","+y","+z","Center"};
	glRasterPos3f(10.20f+m_Zoom,-0.5f,0.0f);
	glCallLists(2,GL_UNSIGNED_BYTE,list[0]); 


	glRasterPos3f(-0.5,10.2f+m_Zoom,0.0f);
	glCallLists(2,GL_UNSIGNED_BYTE,list[1]); 


	glRasterPos3f(-0.5,0.0f,10.2f+m_Zoom);
	glCallLists(2,GL_UNSIGNED_BYTE,list[2]); 


	glRasterPos3f(0.0,0.0f,0.0f);
	glCallLists(6,GL_UNSIGNED_BYTE,list[3]); 


	glPopMatrix();
}

wglUseFontOutlines 
函数显示三维文字

----wglUseFontOutlines使得OpenGL可以显示三维文字。它的用法与wglUseFontBitmaps函数大致相同,但是多了内插计算参数、字体深度、显示方式和装载字模的缓存四个参数,且只能显示TrueType字体,显示前应该先选择字体类型。具体函数实现如下:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中使用OpenGL显示文字可以通过使用QOpenGLWidget和QOpenGLFunctions类实现。以下是一个简单的示例: 首先,在你的Qt项目中添加一个QOpenGLWidget控件,并在其构造函数中启用OpenGL功能: ``` MyGLWidget::MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { // 启用OpenGL功能 initializeOpenGLFunctions(); } ``` 接下来,你需要编写一个代码片段来生成一个纹理,该纹理包含所需的文本。你可以使用Qt的QPainter类将文本渲染到QImage中,并使用QOpenGLFunctions类将其转换为OpenGL纹理。以下是一个示例: ``` void MyGLWidget::createTextTexture() { // 创建QImage并使用QPainter将文本渲染到其中 QImage textImage(256, 256, QImage::Format_RGBA8888); textImage.fill(Qt::transparent); QPainter painter(&textImage); painter.setPen(Qt::white); painter.setFont(QFont("Arial", 24)); painter.drawText(textImage.rect(), Qt::AlignCenter, "Hello, world!"); // 将QImage转换为OpenGL纹理 glGenTextures(1, &m_textTexture); glBindTexture(GL_TEXTURE_2D, m_textTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textImage.width(), textImage.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, textImage.constBits()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } ``` 现在,你需要在OpenGL上下文中绘制纹理。在QOpenGLWidget的paintGL()函数中,你可以使用QOpenGLFunctions类启用纹理映射,并使用glBindTexture()将纹理绑定到当前的纹理单元。然后,你可以使用glBegin()和glEnd()函数绘制一个矩形,并将纹理坐标与顶点坐标一起传递给OpenGL。以下是一个示例: ``` void MyGLWidget::paintGL() { // 启用纹理映射 glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, m_textTexture); // 绘制矩形并绑定纹理坐标 glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f); glEnd(); } ``` 现在,你已经可以在Qt中使用OpenGL显示文字了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值