多边形画圆 vc6.0+opengl

#include <GL/glut.h>
#include <math.h>

void Drawing();
void Init();
void Display();
void Reshape(int,int);
void DrawNGon(float,float,float,int,float=90,bool=false);

void main(int argc,char **argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	glutInitWindowSize(640,480);
	glutInitWindowPosition(10,10);
	glutCreateWindow("多边形绘制园");
	Init();
	glutDisplayFunc(Display);
	glutReshapeFunc(Reshape);
	glutMainLoop();

}
void Init()
{
    glClearColor(1.0,1.0,1.0,1.0);
}

void DrawNGon(float xc,float yc,float radius,int n,float rotAngle,bool bFill)
{
    if(n<3)
		return;

	double x,y,x0,y0;
	double angle=rotAngle *3.1415926/180;// 绘图起止的角度

	double angleInc=2*3.1415926/n;//角度的增量

	if(bFill)                    //绘制填充正多边形
	{
		glBegin(GL_POLYGON);
		for(int i=0;i<n;++i)
		{
			angle+=angleInc;
			x=radius*cos(angle)+xc;
			y=radius*sin(angle)+yc;

			glVertex2f(x,y);
		}
		glEnd();
	}
	else
	{
		x0=radius*cos(angle)+xc;
		y0=radius*sin(angle)+yc;
        

		glBegin(GL_LINES);
		for(int i=0;i<n;++i)
		{
			angle+=angleInc;
			x=radius*cos(angle)+xc;
			y=radius*sin(angle)+yc;

			glVertex2f(x0,y0);
			glVertex2f(x,y);
			x0=x;
			y0=y;
		}
		glEnd();
	}
}

void Drawing()
{
	glColor3f(0.0,1.0,0.0);
//	DrawNGon(0,0,50,5);
	DrawNGon(0,0,50,150,0,true);
}

void  Display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	Drawing();

	glutSwapBuffers();
}

void Reshape(int w,int h)
{
	GLfloat aspect=(GLfloat)w/(GLfloat)h;

	GLfloat winw,winh;

	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	if(w<h)
	{
		winw=100;
		winh=100*aspect;
	}
	else
	{
		winw=100/aspect;
		winh=100;
	}
	gluOrtho2D(-winh,winh,-winw,winw);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值