opengl使用两条Bezier曲线绘制的平面鸡蛋
[code][color=#0000FF]#include[/color] [color=#800000]<GL/glut.h>[/color][color=#0000FF]#include[/color] [color=#800000]<GL/glu.h>[/color]
[color=#0000FF]float[/color] aVertex[[color=#800080]4[/color]][[color=#800080]3[/color]]={{-[color=#800080]0.5[/color],[color=#800080]0[/color],[color=#800080]0[/color]},{-[color=#800080]0.3[/color],[color=#800080]0.8[/color],[color=#800080]0[/color]},{[color=#800080]0.3[/color],[color=#800080]0.8[/color],[color=#800080]0[/color]},{[color=#800080]0.5[/color],[color=#800080]0[/color],[color=#800080]0[/color]}};
[color=#0000FF]float[/color] bVertex[[color=#800080]4[/color]][[color=#800080]3[/color]]={{-[color=#800080]0.5[/color],[color=#800080]0[/color],[color=#800080]0[/color]},{-[color=#800080]0.66[/color],-[color=#800080]0.6[/color],[color=#800080]0[/color]},{[color=#800080]0.66[/color],-[color=#800080]0.8[/color],[color=#800080]0[/color]},{[color=#800080]0.5[/color],[color=#800080]0[/color],[color=#800080]0[/color]}};
[color=#0000FF]void[/color] display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor4f([color=#800080]0.4[/color],[color=#800080]0.5[/color],[color=#800080]0.7[/color],[color=#800080]1[/color]);
glBegin(GL_POINTS);
glVertex3fv(aVertex[[color=#800080]0[/color]]);
glVertex3fv(aVertex[[color=#800080]1[/color]]);
glVertex3fv(aVertex[[color=#800080]2[/color]]);
glVertex3fv(aVertex[[color=#800080]3[/color]]);
glEnd();
glColor3f([color=#800080]0.7[/color],[color=#800080]0.2[/color],[color=#800080]0.2[/color]);
glMap1f(GL_MAP1_VERTEX_3,[color=#800080]0[/color],[color=#800080]1[/color],[color=#800080]3[/color],[color=#800080]4[/color],&aVertex[[color=#800080]0[/color]][[color=#800080]0[/color]]);
glEnable(GL_MAP1_VERTEX_3);
glBegin(GL_LINE_STRIP);
[color=#0000FF]const[/color] [color=#0000FF]int[/color] NUM=[color=#800080]30[/color];
[color=#0000FF]for[/color]([color=#0000FF]int[/color] i=[color=#800080]0[/color];i<=NUM;++i)
{
glEvalCoord1f([color=#800080]1.0f[/color]*i/NUM);
}
glEnd();
glDisable(GL_MAP1_VERTEX_3);
glMap1f(GL_MAP1_VERTEX_3,[color=#800080]0[/color],[color=#800080]1[/color],[color=#800080]3[/color],[color=#800080]4[/color],&bVertex[[color=#800080]0[/color]][[color=#800080]0[/color]]);
glEnable(GL_MAP1_VERTEX_3);
glBegin(GL_LINE_STRIP);
[color=#0000FF]for[/color]([color=#0000FF]int[/color] i=[color=#800080]0[/color];i<=NUM;++i)
{
glEvalCoord1f([color=#800080]1.0f[/color]*i/NUM);
}
glEnd();
glDisable(GL_MAP1_VERTEX_3);
glutSwapBuffers();
}
[color=#0000FF]void[/color] reshape([color=#0000FF]int[/color] w,[color=#0000FF]int[/color] h)
{
glViewport([color=#800080]0[/color],[color=#800080]0[/color],w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective([color=#800080]120[/color],[color=#800080]1[/color],[color=#800080]0.1[/color],[color=#800080]10[/color]);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt([color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]1[/color],[color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]1[/color],[color=#800080]0[/color]);
}
[color=#0000FF]void[/color] init()
{
glClearColor([color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]0[/color],[color=#800080]0[/color]);
glShadeModel(GL_SMOOTH);
}
[color=#0000FF]int[/color] main([color=#0000FF]int[/color] argc,[color=#0000FF]char[/color]**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowSize([color=#800080]500[/color],[color=#800080]500[/color]);
glutInitWindowPosition([color=#800080]0[/color],[color=#800080]0[/color]);
glutCreateWindow(argv[[color=#800080]0[/color]]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
[color=#0000FF]return[/color] [color=#800080]0[/color];
}[/code]
页:
[1]