由例子程序给出的显示列表,展示重定形函数的应用
![](https://images.cnblogs.com/cnblogs_com/lizhi0320/4.jpg)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
const double TWO_PI=6.2831853;
//初始化窗口大小
GLsizei winWidth =400,winHeight=400;
GLuint regHex;
class screenPt
{
private:
GLint x,y;//初始化坐标为(0,0)
public:
screenPt(){
x=y=0;
}
void setCoords(GLint xCoord,GLint yCoord){
x=xCoord;
y=yCoord;
}
GLint getx() const{
return x;
}
GLint gety() const{
return y;
}
};
static void init (void)
{
screenPt hexVertex,circCtr;
GLdouble theta;
GLint k;
//设置圆心坐标
circCtr.setCoords(winWidth/2,winHeight/2);
glClearColor(1.0,1.0,1.0,0.0);/* 显示窗口颜色为白色*/
//Set up a display list for a red regular hexagon.
/*Vertices for the hexagon are six equally spaced.
points aroud the circumference of a circle.*/
regHex=glGenLists(1);//get an identifier for the display list
glNewList(regHex,GL_COMPILE);
glColor3f(1.0,0.0,0.0);//set fill color for hexagon to red
glBegin(GL_POLYGON);
for (k=0;k<6;k++)
{
theta=TWO_PI*k/6.0;
hexVertex.setCoords(circCtr.getx()+150*cos(theta),
circCtr.gety()+150*sin(theta));
glVertex2i(hexVertex.getx(),hexVertex.gety());
}
glEnd();
glEndList();
}
void regHexagon()
{
glClear(GL_COLOR_BUFFER_BIT);
glCallList(regHex);
glFlush();
}
void winReshapeFcn(int newWidth,int newHeight)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)newWidth,0.0,(GLdouble)newHeight);
glClear(GL_COLOR_BUFFER_BIT);
}
void main( int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(winWidth,winHeight);
glutCreateWindow("Reshape-Function & Display-List Example");
init();
glutDisplayFunc(regHexagon);
glutReshapeFunc(winReshapeFcn);
glutMainLoop();