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.0f, 1.0f, 0.0f); // 上顶点
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glEnd();
glPopMatrix(); //恢复当前矩阵为上一次push时的矩阵
glTranslatef(1.5f,0.0f,-6.0f); //右移动1.5并向屏幕内部移动6.0 在那区域画三角形
glBegin(GL_QUADS); // 绘制正方形
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
glutSwapBuffers(); //强制绘图命令执行绘制在缓冲区交换出来
}
最终显示结果为:
末尾总结:
从中我学到如何绘制opengl的基本图元 三角形,四边形,甚至多边形.
其次还理解了glpushMatrix() glpopMatrix()的含义即使用规则等.
glpushMatrix() 保存了当前矩阵 使得其后可以恢复原来的位置进行绘制
glpopMatrix() 恢复当前矩阵为栈顶矩阵..
posted on 2009-07-15 11:09
米游 阅读(289)
评论(0) 编辑 收藏 引用 所属分类:
OpenGL/OSG