opengl学习 nehe opengl lesson_2

opengl学习<四> nehe opengl lesson_2

lesson_2的代码将基于lesson_1中所创建的头文件而实现..
其次我想说下 我为什么没有将glut注册函数那块也定义成共用的.因为有些函数我尚未实现或者尚未考虑到该如何实现,总在变化的.故而我将它分离出来了.可以很肯定的事我需要什么就注册什么函数,这样也是应该来说比较清晰的.

nehe lesson_2中的是实现了在窗口左边绘制一个三角形,在窗口右边绘制了一个正方形.

#include  " openglglut.h "

/**/ /*
** opengl 教程第二课内容
** 在窗口的左边部分绘制一个白色的三角形
** 在窗口的右边部分绘制一个白色的正方形
*/

int  main( int  argc,  char **  argv)
{
    
/**//** 初始化窗口 并创建窗口*/
    createWindow(
"opengl lesson_2",&argc,argv);

    
/**//** 注册glut的一些函数 */        
    glutReshapeFunc(glutResize);     
//窗口调整函数 使得调整后图形显示不发生改变
    glutDisplayFunc(glutDisplay);    //重绘函数     使得可以在窗口中绘制图形
    glutSpecialFunc(glutSpecial);    //特殊按键函数 使得实现全屏/窗口切换

    
/**//** 初始化opengl的一些操作*/
    InitOpenGL();

    
/**//** 进入仿真循环*/
    glutMainLoop();
}


/**/ /** 实现头文件当中定义的绘制函数 绘制三角形和正方形 **/
void  glutDisplay( void )
{
    glClear(GL_COLOR_BUFFER_BIT 
| GL_DEPTH_BUFFER_BIT);
    
    glLoadIdentity();                   
//将先初始化单位矩阵
    glPushMatrix();                    //将当前矩阵复制一个压入栈顶,并保持当前矩阵不变
    glTranslatef(-1.5,0.0,-6.0);       //左移动1.5并向屏幕内部移动6.0 在那区域画三角形
    glBegin(GL_TRIANGLES);             // 绘制三角形
        glVertex3f( 0.0f1.0f0.0f); // 上顶点
        glVertex3f(-1.0f,-1.0f0.0f); // 左下
        glVertex3f( 1.0f,-1.0f0.0f); // 右下
    glEnd();
    glPopMatrix();                     
//恢复当前矩阵为上一次push时的矩阵

    glTranslatef(
1.5f,0.0f,-6.0f);     //右移动1.5并向屏幕内部移动6.0 在那区域画三角形

    glBegin(GL_QUADS);                 
// 绘制正方形
        glVertex3f(-1.0f1.0f0.0f); // 左上
        glVertex3f( 1.0f1.0f0.0f); // 右上
        glVertex3f( 1.0f,-1.0f0.0f); // 左下
        glVertex3f(-1.0f,-1.0f0.0f); // 右下
    glEnd();

    glutSwapBuffers();                 
//强制绘图命令执行绘制在缓冲区交换出来
}

最终显示结果为:
opengl学习 nehe opengl lesson_2_第1张图片

末尾总结:
             从中我学到如何绘制opengl的基本图元 三角形,四边形,甚至多边形.
            其次还理解了glpushMatrix() glpopMatrix()的含义即使用规则等.
            glpushMatrix() 保存了当前矩阵 使得其后可以恢复原来的位置进行绘制
            glpopMatrix() 恢复当前矩阵为栈顶矩阵..

你可能感兴趣的:(opengl学习 nehe opengl lesson_2)