追海逐风

导航

开始 OpenGL

OpenGL是一个状态机,书上如是说。

OpenGL的API是给C语言设计的,和面向对象的思维很不相同。比如说大部分绘图API都是这样的:drawRectangle(Rect r, Pen p, Brush b),在画一个图元的时候指定颜色和样式,而OpenGL不是这样,而是将颜色样式等因素保存在全局状态中,glVertex3f(1.0, 0.5, 0.5),画一个点只指定点的坐标,其他信息都有一个“当前值”。这个“当前”状态的概念贯穿整个OpenGL框架,比如说“当前矩阵”、“当前投影”、“当前颜色”、“当前窗口”。这种方式使用起来似乎不那么直观,而且在使用过程中要注意一些常见的问题,之所以这样设计是因为用当前状态保存信息比每次都指定所有信息效率要高。

举例:

glPushMatrix(); 
    glPointSize(4);	
    glTranslatef (-50, 40,-10);
    glRotatef(r,1.0,1.0,1.0);
    glColor3f(1.0f, 0.0f, 0.0f);
    glBegin(GL_POINTS);
        glVertex3f( 0.0f, 1.0f,-1.0f);
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd();
glPopMatrix();

 

posted on 2010-11-28 13:16  追海逐风  阅读(296)  评论(0编辑  收藏  举报