opengl学习笔记2-2-矩形绘制

来源:互联网 发布:美国网络加速器 编辑:程序博客网 时间:2024/05/01 03:50

本次利用opengl来绘制基本的图形,来使第一节的窗口内容慢慢的丰富起来。

opengl核心库提供了115个函数(也许现在更多),函数的前缀为gl。我个人的理解是,opengl没有像dx一样,提供过多的封装,而只是提供了最近的功能函数,作为程序员可以用这些接口函数来实现自己想要的功能和效果,所以opengl需要更为聪明的使用。

最近在做ios上的东西,在做东西的过程中深感这些年来自己一直学习的并不是标准C++,而是windows C++。当离开了windows所提供的环境,自己无所适从,不知该如何下手。在此推荐一个mac的一个blog:mactalk(百度)。池建强博主会定期的更新一些mac的使用技巧,对初学者很有帮助。

希望opengl高手在看到这些文字时,能够提供宝贵的建议。


这节学习使用opengl来绘制最基本的矩形,代码如下:

//视口和裁剪区域 #include "GL/freeglut.h"void RenderScene(void){//clear the window use the current colorglClear(GL_COLOR_BUFFER_BIT);//set the draw color is redglColor3f(1.0f, 0.0f, 0.0f);//use the current draw color draw a rectangleglRectf(-25.0f, 25.0f, 25.0f, -25.0f);glFlush();}void SetupRC(void){glClearColor(0.6f, 0.4f, 0.7f, 1.0f);}//void ChangeSize(GLsizei w, GLsizei h){//if (h == 0){h = 1;}glViewport(0, 0, w, h);//reset coordinate systemglMatrixMode(GL_PROJECTION);glLoadIdentity();//build clipping region(left, right, bottom, top, near, far)GLfloat aspectRatio = (GLfloat)w/h;GLint nRange = 100;if (w <= h){glOrtho(-nRange, nRange, -nRange/aspectRatio, nRange/aspectRatio, 1.0, -1.0);}else{glOrtho(-nRange*aspectRatio, nRange*aspectRatio, -nRange, nRange, 1.0, -1.0);}glMatrixMode(GL_MODELVIEW);glLoadIdentity();}int main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);glutCreateWindow("GLRect");glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);SetupRC();glutMainLoop();return 0;}

运行效果如图:



本节代码下载地址:http://download.csdn.net/detail/airbigboy/6316025

  这一章使用到了一些opengl新的知识。

glut
void glutReshapeFunc( void (* callback)( int, int ) );
设置改造回调函数,当窗口的大小改变时。会调用所设置有该函数设置的回调函数。任何时候,当窗口的大小改变时,需要重新设置坐标系统。
opengl
void glColor3f (GLfloat red, GLfloat green, GLfloat blue);
设置当前绘图颜色
void glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
用当前颜色绘制一个填充矩形,(x1, y1)左上角坐标,(x2,y2)右下角坐标。
void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
x,y指定了窗口内部视图的左下角,width和height参数指定了视口的大小。(像素为单位)
void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
我们使用glOrtho创建了正投影模式。
void glLoadIdentity (void);
        调用glLoadIdentity()之后,您实际上将当前点移到了屏幕中心:类似于一个复位操作
        1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
        2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
        3.中心左面的坐标值是负值,右面是正值。
            移向屏幕顶端是正值,移向屏幕底端是负值。
            移入屏幕深处是负值,移出屏幕则是正值。

主要应该理解changeSize函数的作用。
定义视口,视口定义了实际的绘图区域。
重新定义了坐标区域。由于本节不考虑3D的情况,故设置z轴范围从-1到1.
可以修改changeSize中各个函数的参数值,来体会各个函数的作用!