OpenGL實現三次Bezier曲線


#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;
	
	glPointSize(3);
	glColor3f(1.0, 0.0, 0.0);

	//控制點
	glBegin(GL_POINTS);
	glVertex2f(x0, y0);
	glVertex2f(x1, y1);
	glVertex2f(x2, y2);
	glVertex2f(x3, y3);
	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), 3) + 3 * x1*t*(1 - t)*(1 - t) + 3 * x2*t*t*(1 - t) + x3 * pow(t, 3); //x分量
		y = y0 * pow((1 - t), 3) + 3 * y1*t*(1 - t)*(1 - t) + 3 * y2*t*t*(1 - t) + y3 * pow(t, 3); //y分量
		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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM