opengl之位图的绘制和gluOrtho2D等函数详解

位图绘制

先来段代码吧;

#include <iostream>

#include <gl/glut.h>

using namespace std;
#pragma  comment(lib,"opengl32.lib")
#pragma  comment(lib,"glut32.lib")
#pragma  comment(lib,"glu32.lib")



GLubyte rasters[24]={
	0xc0,0x00,0xc0,0x00,0xc0,0x00,0xc0,0x00,
	0xc0,0x00,0xff,0x00,0xff,0x00,0xc0,0x00,
	0xc0,0x00,0xc0,0x00,0xff,0xc0,0xff,0xc0
};
void init()
{

	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel(GL_FLAT);
	glPixelStorei(GL_UNPACK_ALIGNMENT,1);

}

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	GLfloat colors[]={1.0,1.0,0.0};
	glColor3fv(colors);
	glRasterPos2i(0,0);
	glBitmap(10,12,0.0,0.0,11.0,0.0,rasters);
	glBitmap(10,12,0.0,0.0,11.0,0.0,rasters);
	glBitmap(10,12,0.0,0.0,11.0,0.0,rasters);

	glFlush();

}

void reshape(int w,int h)
{

	glViewport(0,0,(GLsizei)w,(GLsizei)h);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);//left right,buttom,up (left,buttom),(right,up)
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}


int main(int argc,char** argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
	glutInitWindowSize(500,500);
	glutInitWindowPosition(100,100);
	glutCreateWindow(argv[0]);
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMainLoop();
	return 0;

}

显示结果:


位图的绘制就是上面的代码。是不是很简单。。

代码分析:

书上那些理论确实是很熟,比如gluOthor2d函数是干什么用的,大家肯定都知道,不知道,网上一查什么都清楚了,但是在具体编程中如何才能合适的用他们呢?这才是关键,我一直卡在这一步了,通过这段代码的编写,我终于搞清楚了这几天的疑惑????下面我来介绍一下。。
上面那段代码有1个关键的函数:gluOthor2d,你如果去掉这行也是可以的,3个F照样显示出来,如:

怎么会变成这样呢?在没调用gluOthor2d函数之前,窗口的中心坐标为(0,0);调用了这个函数之后窗口的中心坐标不再是(0,0)了,窗口的左下角才是(0,0)。
然后来看看gluOthor2d函数的参数,我们实际上是用(0,0)到(w,h)的这个范围来裁剪我们的视野,也就是说只有在这个视野范围之内的东西,我们才能在窗口中看到它。假如我们来改变一下光栅位置(glRasterPos2i函数指定):(-1,0),不出所料,你什么都看不到了。。

屏幕坐标和屏幕像素的转换:
   一个单位的屏幕坐标就是width/2的像素。。能理解吧。
Over...加油,共同进步。。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL中使用位图字体需要以下步骤: 1. 加载字形纹理 首先需要将字形纹理加载到OpenGL中。这可以使用OpenGL中的纹理贴图技术。通常,每个字形都包含在一个独立的图片中,你需要将这些图片加载到OpenGL纹理中。 2. 设置显示模式 下一步是设置显示模式。OpenGL提供了两种显示模式:正交和透视。正交模式下,物体的大小和位置与摄像机的距离无关,因此适合用于2D显示。透视模式下,物体的大小和位置会随着距离而变化,因此适合用于3D显示。在这里,我们将使用正交模式。 3. 设置投影矩阵 接下来需要设置投影矩阵。投影矩阵是一个将3D物体转换为2D屏幕坐标的矩阵。在正交模式下,投影矩阵可以简单地设置为一个单位矩阵。 4. 设置模型视图矩阵 模型视图矩阵定义了物体在世界坐标系中的位置和方向。在这里,我们将把它设置为一个单位矩阵。 5. 开始渲染 现在可以开始渲染了。我们需要使用glRasterPos()函数来指定每个字符的位置,然后使用glDrawPixels()函数来显示字符的图像。glRasterPos()函数用于指定下一个像素在屏幕上的位置,而glDrawPixels()函数用于绘制像素数据。 6. 清理 最后需要释放所有资源,包括字形纹理和OpenGL上下文。 这就是使用位图字体在OpenGL中渲染文本的基本步骤。需要注意的是,这种方法只适合用于低分辨率的屏幕,因为字形纹理的质量比较低。如果需要更高质量的文本渲染,可以考虑使用矢量字体。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值