随笔-38  评论-23  文章-0  trackbacks-0

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的基本图元 三角形,四边形,甚至多边形.
            其次还理解了glpushMatrix() glpopMatrix()的含义即使用规则等.
            glpushMatrix() 保存了当前矩阵 使得其后可以恢复原来的位置进行绘制
            glpopMatrix() 恢复当前矩阵为栈顶矩阵..
posted on 2009-07-15 11:09 米游 阅读(273) 评论(0)  编辑 收藏 引用 所属分类: OpenGL/OSG

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理