我是靠谱客的博主 活泼眼神,最近开发中收集的这篇文章主要介绍【OpenGL】常见的函数说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

几乎每个OpenGL程序都会涉及到这些东西,以最近做的图形学实验2为例,总结一下:

int main(int argc,char *argv[]){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);

glutInitWindowSize(640,480);

glutCreateWindow("图形学实验2");

glutDisplayFunc(redraw);

glutReshapeFunc(reshape);

glutIdleFunc(idle);

glutMainLoop();

return 0;

}

1)glutInit是例行公事一样的存在,表示初始化。

2)glutInitDisplayMode设置显示模式,其中的GLUT_DOUBLE表示双缓冲。双缓冲指的是在绘制图形的时候先在一个缓冲区把它绘制好,绘图指令完成后再通过交换指令把它呈现到屏幕上,这样绘制效率较高。OpenGL一般采用双缓冲,如果只是显示静态图片,也可以用单缓冲模式。但我们设置了双缓冲模式以后,在绘图的函数里一定会加上这个函数:

glutSwapBuffers();//执行双缓冲交换

它的作用就是交换两个缓冲区的指针,可以简单理解成把后台画好的东西呈现到屏幕上,如果设置了双缓冲却没有交换缓冲区,往往什么都看不到。

3)调整窗口大小

4)创建窗口

5)glutDisplayFunc调用绘图函数

6)glutReshapeFunc是用来调整图形比例的,保证当窗口大小变化时图形不走样。这里可以具体看看上面例子的reshape怎么实现:

void reshape(int width,int height){
if (height==0){
height=1;//设置为1,防止除0
}
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

里面又有了很多东西,一个一个来看:

①glViewport用来设置“视口”。视口可以简单理解成窗口的一部分,默认情况下它们是重叠的。四个参数依次表示视口坐标的原点(x、y方向)以及长宽。利用这个函数我们可以分割当前的窗口,把图像分区域绘制出来。

②glMatrixMode设置了矩阵的模式。你可能会对此感到奇怪,怎么突然冒出了“矩阵”这个数学概念?其实是因OpenGL中的变换(平移、旋转等都是通过矩阵来完成的,数学上的矩阵本身就可以表示一个变换嘛)上面的代码设置成了“投影”。这里有三个参数:GL_PROJECTION表示对投影进行操作,GL_MODELVIEW表示对模型视景进行操作,GL_TEXTURE表示对纹理进行操作。

③加载单位矩阵。后面的变换矩阵都是和它做乘法。

④gluPerspective:这个函数很有意思,都可以单独开一个贴了。简单来说可以用下面这张图概括:

(图被csdn吃了)

第一个参数表示视角大小,可以简单当成我们眼睛张开多大。第二个表示宽高比。第三第四个是上图中近平面和远平面的距离。

7)glutIdleFunc

这个函数用来负责在没有窗口事件的时候OpenGL在干什么。例如:

/*没有窗口事件发生时调用*/
void idle(){
glutPostRedisplay();//加入glutPostRedisplay()来重绘图像,否则图像只有响应鼠标或键盘消息时才会更新图像
}

然后在glutIdleFunc调用它,达到的目的就是尽可能频繁地去更新窗口、绘图。这样就能看到动画效果了。如果不用它,将会看到静止的画面。

8)glutMainloop()也是例行公事一样的东西。因为OpenGL是逐帧绘制,要画出完整图像相当于进到了一个循环里,不断地画.....

最后

以上就是活泼眼神为你收集整理的【OpenGL】常见的函数说明的全部内容,希望文章能够帮你解决【OpenGL】常见的函数说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部