opengl学习笔记(一)

很早之前就接触了一些opengl的东西,现在想把学习中一些经验和感想写下来,以备不时查阅,或者别人参考,错误之处也希望别人指正。

首先呢,当然是搭建opengl的环境了,这个事情已经有太多人写过太多的教程了,并且不同的系统方法也不同,不同的IDE如何使用也不同,那么这里就不再赘述了。

opengl在windows下的文件和linux下的文件不同,其实也就是动态链接库的问题,所以编译命令也不一样,查一查文件就知道该用什么命令编译,比如在linux下的libGL.so的话,就要用-lGL这样的命令来编译,编译的事情也就说到这里,这不是重点。

好,接下来就记录一下今天所学中需要注意的地方:


一、在windows下要包含windows.h这个头文件,要不然那些函数就会未定义,但是linux下面不用,linux下的X窗口系统,(只知道windows和linux,屌丝买不起mac)。


二、视景体,视景体是相对于相机而言的,也就是说相对于观察点而言的,并非是在世界坐标系中有那么一块固定的区域可见,而其他的区域不可见,比如说glFrustum( -1 , 1 , -1 , 1 , 1 , 100 )  含义是在相机前面1个单位到100个单位可见,相机前面1个单位的面从左到右和从上到下都是从-1到1这个范围可见,并非是在世界坐标系下面哪个范围可见。


三、如果画动画的话,那么最好对它的帧率加以限制,限制的方法是这样的:

double   FPS = 100 ; 这是你规定的一个具体的帧率

然后opengl有这样的一个函数,可以限制帧率:

glutTimerFunc( ( 1000 / ( int )FPS ) , Timer , 1 ) ;

这是一个回调函数,它回调的就是Timer函数,我是这样定义的Timer函数:

void  Timer( int value )
{
    Time += 1.0 ;
    glutPostRedisplay();
    glutTimerFunc( int( 1000 / FPS ) , Timer , 1 ) ;
}

这样就可以对帧率予以限制了,在主函数中调用glutTimerFunc( ( 1000 / ( int )FPS ) , Timer , 1 )就可以了。


四、对于绘画的内容、速度,我们不应该让帧率来决定,如果这样的话,那么帧率快的时候,动画会非常快,在不同情况下就有可能出现不同的表现,有时候根本反应不过来之类的,我们应该以现实中时间流过的速度作为衡量标准,这样不论帧率快慢,动画的内容、速度都是一样的,在C++中,有一个可以获取当前时间的函数,要包含time.h这个头文件,使用的时候这样用:

clock_t  now ;

now = clock() ;这样就获取了当前的系统时间,用根据这样获取的时间,在程序中计算动画应该进展到哪一步了,这样就可以让动画进行速度跟帧率无关。

以上是这几天学习的一些经验,先记录在此。

你可能感兴趣的:(风雨飘摇路,opengl,c++,经验)