OpenGL实现四次次Bezier曲线

十年热恋 提交于 2019-12-01 08:49:34
#include <GL/glut.h>
#include <cmath>
void init(void)
{
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0, 500.0, 0.0, 500.0);
	glMatrixMode(GL_MODELVIEW);
}
void  myDisplay()
{
	float x0 = 50, y0 = 50;
	float x1 = 100, y1 = 400;
	float x2 = 300, y2 = 400;
	float x3 = 400, y3 = 50;
	float x4 = 450, y4 = 450;

	glPointSize(3);
	glColor3f(1.0, 0.0, 0.0);

	//控制点
	glBegin(GL_POINTS);
	glVertex2f(x0, y0);
	glVertex2f(x1, y1);
	glVertex2f(x2, y2);
	glVertex2f(x3, y3);
	glVertex2f(x4, y4);
	glEnd();

	//四次次Bezier曲线
	float x, y;
	glColor3f(0.0, 1.0, 0.0);
	glBegin(GL_LINE_STRIP);
	for (float t = 0; t <= 1; t += 0.01)
	{
		x = x0 * pow((1 - t), 4) + 4 * x1*pow((1 - t), 3)*t + 6 * x2*(1 - t)*(1 - t)*t*t + 4 * x3*(1 - t)*pow(t, 3) + x4*pow(t, 4);
		y = y0 * pow((1 - t), 4) + 4 * y1*pow((1 - t), 3)*t + 6 * y2*(1 - t)*(1 - t)*t*t + 4 * y3*(1 - t)*pow(t, 3) + y4*pow(t, 4);
		glVertex2f(x, y);
	}
	glEnd();
	glFlush();
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(500, 500);
	glutCreateWindow("四次Bezier曲线");
	init();
	glutDisplayFunc(myDisplay);
	glutMainLoop();
	return 0;
}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!