您的位置:首页 > 运维架构

OpenGl红皮书第六版阅读笔记p107页实例

2016-09-03 16:17 351 查看
#include <windows.h>//Microskft Windows要求在gl.h或glu.h之前包含windows.h头文件,因为Microsoft Windows版本的和文件内部所使用的一些宏是在Window.h中定义的。

#include<GL/gl.h>//若不加上一项,则glShadeModel (GL_FLAT)就无法识别

#include <GL/glut.h>

void init (void)//将只需要调用一次的操作(设置背景颜色和坐标系统),放入其中

{

 glClearColor(0.0,0.0,0.0,0.0);//将窗口清成黑色

 glShadeModel(GL_SMOOTH);//设置着色模式,参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。在使用光滑着色时(即GL_SMOOTH),独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过差值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色差值得到。

}

void Triangle (void)//绘制三角形

{

 glBegin(GL_TRIANGLES);

 glColor3f(1.0,0.0,0.0);//红

 glVertex2f(25.0,5.0);//点的坐标

 glColor3f(0.0,1.0,0.0);//绿

 glVertex2f(5.0,5.0);

 glColor3f(0.0,0.0,1.0);//蓝

 glVertex2f(5.0,25.0);

 

 

 glEnd();

}

void display(void)//用于渲染场景(并可能需要重新渲染)的操作放在这里面,也是用于回调函数的函数。

{

 glClear(GL_COLOR_BUFFER_BIT);//实际完成清除窗口的任务

 Triangle();//画三角形

 glFlush();//绘图命令将被实际执行

}

void reshape(int w,int h)//reshape回调函数,参考p21用于重新建立一个矩形区域,把它作为新的渲染画布

{

 glViewport(0,0,(GLsizei)w,(GLsizei)h);//用于调整绘图的像素矩形,使它占据整个新窗口。

 glMatrixMode(GL_PROJECTION);//glMatrixMode设置当前矩阵模式:projection对投影矩阵应用随后的矩阵操作.

 glLoadIdentity();//glMatrixMode与glLoadIdentity()一同使用gl,LoadIdentity():将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作.在glLoadIdentity()之后我们为场景设置了透视图。glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模型视图矩阵储存了有关物体的信息。
//glM,glL,gluO这三行代码,调整用于绘图的坐标系统,使左下角的坐标是(0,0),右上角的坐标是(w,h)

 if(w<=h)

  gluOrtho2D(0.0,30.0,0.0,30.0*(GLfloat) h/(GLfloat) w);

 else

  gluOrtho2D(0.0,30.0*(GLfloat) w/(GLfloat) h,0.0,30.0);

 glMatrixMode(GL_MODELVIEW);///GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.

}

int main (int argc,char**argv)//GLUT通过五个函数执行初始化窗口所需要的任务

{

 glutInit(&argc,argv);//它应该在调用其他任何GLUT函数之前被调用。用于对GLUT进行初始化,并处理所有的命令行参数

 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//指定了使用RGBA模式还是颜色索引模式,还指定了是使用单缓冲还是双缓冲窗口

 glutInitWindowSize(500,500);//指定了窗口的大小,以像素为单位

 glutInitWindowPosition(100,100);//指定了窗口左上角的屏幕位置

 glutCreateWindow(argv[0]);//创建一个支持OPENGL渲染环境的窗口。

 glutDisplayFunc(display);//当GLUT确定一个窗口的内容需要重新显示时,通过它所注册的回调函数就会被执行。因此,应该把重绘场景所需要的所有代码都放在这个回调函数里,本例子就是display函数。

 glutReshapeFunc(reshape);//表示当窗口的大小发生改变时应该采取什么行动。即重绘。

 glutMainLoop();//在调用它之前,glutCreateWindow (argv[0]),并没有被显示。调用它来启动程序。

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl 阅读 实例