OpenGL nrdraw down load here: http://rorger.download.csdn.net/ 将常用的一些绘制组成一个文件,文笔功底不够,请见谅: //nrdraw.h //rorger, 2011 /* Any problem,contact me:rorger@hotmail.com last modified:5/7/2011*/ #ifndef NRDRAW_H #define NRDRAW_H //画笛卡尔坐标系 void NRDrawCoordinate(); //绘制圆弧/圆/饼图 void NRDrawArc(float x,float y,float start_angle,float end_angle,float delta_angle,float radius,bool fill); void NRDrawCircle(float x, float y, float radius,bool fill); void NRDrawPie(float x,float y,float start_angle,float end_angle,float delta_angle,float radius,bool fill); #endif //NRDRAW_H 实现: //nrdraw.cpp //rorger, 2011 /* Any problem,contact me:rorger@hotmail.com last modified:5/7/2011*/ #include "nrdraw.h" #include "glut.h" #include "math.h" /* x: float - 圆弧所在圆心横坐标 y: float - 圆弧所在圆心纵坐标 start_angle: float - 起始角度,基于笛卡尔坐标,第一象限开始 end_angle: float - 终止角度,基于笛卡尔坐标,第一象限开始 delta_angle: float - 逼近时使用的精度 radius: float - 圆弧所在圆的半径 fill: bool - 表示是否进行填充 */ void NRDrawArc(float x,float y,float start_angle,float end_angle,float delta_angle,float radius,bool fill) { if (fill) { glBegin(GL_TRIANGLE_FAN); } else { glBegin(GL_LINE_STRIP); } for (float i=start_angle;i<=end_angle;i+=delta_angle) { float vx=x+radius * cos(i); float vy=y+radius*sin(i); glVertex2f(vx,vy); } glEnd(); } /* x: float - 圆心横坐标 y: float - 圆心纵坐标 radius: float - 圆的半径 fill: bool - 表示是否进行填充 */ void NRDrawCircle(float x, float y, float radius,bool fill) { float pi=acos(-1.0); NRDrawArc(x,y,0,2*pi,pi/360,radius,fill); } /* x: float - Pie所在圆心横坐标 y: float - Pie所在圆心纵坐标 start_angle: float - 起始角度,基于笛卡尔坐标,第一象限开始 end_angle: float - 终止角度,基于笛卡尔坐标,第一象限开始 delta_angle: float - 逼近时使用的精度 radius: float - Pie所在圆的半径 fill: bool - 表示是否进行填充 */ void NRDrawPie(float x,float y,float start_angle,float end_angle,float delta_angle,float radius,bool fill) { NRDrawArc(x,y,start_angle,end_angle,delta_angle,radius,fill); if (fill) { glBegin(GL_TRIANGLE_FAN); } else { glBegin(GL_LINES); } glVertex2f(x,y); glVertex2f(x+radius*cos(start_angle),y+radius*sin(start_angle)); if (!fill) { glVertex2f(x,y); } glVertex2f(x+radius*cos(end_angle),y+radius*sin(end_angle)); glEnd(); } //画笛卡尔坐标系 void NRDrawCoordinate() { #ifndef WIDTH #define WIDTH 640 #endif #ifndef HEIGHT #define HEIGHT 480 #endif glColor3f(1.0,0.0,0.0); glBegin(GL_LINES); glVertex2d(-WIDTH/2.0,0); glVertex2d(WIDTH/2.0,0); glEnd(); glBegin(GL_LINES); glVertex2d(0,HEIGHT/2.0); glVertex2d(0,-HEIGHT/2.0); glEnd(); }