• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 62
    下载次数
  • 2005-08-23 09:48
    上传日期
关于贝塞尔曲线,带控制顶点和控制多边形达到G1连续的两段3次Bèzier曲线的绘制
Bèzier.zip
  • www.pudn.com.txt
    218B
  • Bèzier.cpp
    3.4KB
内容介绍
#include <windows.h> #include <GL/glut.h> #include <stdlib.h> /*定义曲线一4个控制顶点坐标*/ GLfloat ctrlpoints1[4][3]={ {-4.0,0.0,0.0},{-2.0,3.0,0.0}, {2.0,4.0,0.0},{3.0,1.5,0.0}}; /*定义曲线一4个颜色控制顶点*/ GLfloat ctrlcolor1[4][4]={ {1.0,0.0,0.0,1.0},{0.0,1.0,0.0,1.0}, {1.0,0.0,0.0,1.0},{0.0,1.0,0.0,1.0}}; /*定义曲线二4个控制顶点坐标*/ GLfloat ctrlpoints2[4][3]={ {3.0,1.5,0.0},{4.0,-1.0,0.0}, {6.5,-1.0,0.0},{8.0,1.0,0.0}}; /*定义曲线二4个颜色控制顶点*/ GLfloat ctrlcolor2[4][4]={ {0.0,0.0,1.0,1.0},{0.0,0.0,0.0,1.0}, {1.0,0.0,0.0,1.0},{0.0,0.0,0.0,1.0}}; void display(void) { int i; glClearColor(1.0,1.0,1.0,1.0); /*清除颜色缓存和深度缓存*/ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /*曲线一定义一维顶点求值器*/ glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,&ctrlpoints1[0][0]); /*曲线一定义一维颜色求值器*/ glMap1f(GL_MAP1_COLOR_4,0.0,1.0,4,4,&ctrlcolor1[0][0]); /*激活一维顶点求值器*/ glEnable(GL_MAP1_VERTEX_3); /*激活一维颜色求值器*/ glEnable(GL_MAP1_COLOR_4); /*指定颜色的浓淡处理模式*/ glShadeModel(GL_FLAT); // 设置线条宽度 glLineWidth(5.0); //曲线一计算曲线上60个点的坐标,并顺序连接 glBegin(GL_LINE_STRIP); for(i=0;i<=60;i++) glEvalCoord1f((GLfloat)i/60.0); glEnd(); //曲线一显示4个控制顶点 glPointSize(6.0); glColor3f(0.0,0.0,1.0); glBegin(GL_POINTS); for(i=0;i<4;i++) glVertex3fv(&ctrlpoints1[i][0]); glEnd(); //曲线一显示控制多边形 glLineWidth(2.0); glBegin(GL_LINE_STRIP); for(i=0;i<4;i++) glVertex3fv(&ctrlpoints1[i][0]); glEnd(); glPopMatrix(); glPushMatrix(); //曲线二定义一维顶点求值器 glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,&ctrlpoints2[0][0]); //曲线二定义一维颜色求值器 glMap1f(GL_MAP1_COLOR_4,0.0,1.0,4,4,&ctrlcolor2[0][0]); //激活一维顶点求值器 glEnable(GL_MAP1_VERTEX_3); //激活一维颜色求值器 glEnable(GL_MAP1_COLOR_4); //指定颜色的浓淡处理模式 glShadeModel(GL_FLAT); // 设置线条宽度 glLineWidth(5.0); //曲线二计算曲线上60个点的坐标,并顺序连接 glBegin(GL_LINE_STRIP); for(i=0;i<=60;i++) glEvalCoord1f((GLfloat)i/60.0); glEnd(); //曲线二显示4个控制顶点 glPointSize(6.0); glColor3f(1.0,0.0,0.0); glBegin(GL_POINTS); for(i=0;i<4;i++) glVertex3fv(&ctrlpoints2[i][0]); glEnd(); //曲线二显示控制多边形 glLineWidth(2.0); glBegin(GL_LINE_STRIP); for(i=0;i<4;i++) glVertex3fv(&ctrlpoints2[i][0]); glEnd(); glPopMatrix(); /*强迫绘制完成*/ glFlush(); } void reshape(int w, int h)/**/ { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-10.0,10.0,-10.0* (GLfloat)h/(GLfloat)w, 10.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho(-10.0*(GLfloat)w/(GLfloat)h, 10.0*(GLfloat)w/(GLfloat)h, -10.0, 10.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(300,300); glutInitWindowPosition(200,200); glutCreateWindow("Bèzier Curve"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return(0); }
评论
    相关推荐
    • 绘制贝塞尔曲线.rar
      赛贝尔曲线的绘制,使用VB开发软件来进行曲线的绘制
    • 贝塞尔曲线.zip
      演示贝塞尔曲线的形成过程,鼠标点击可移动关键点
    • 贝塞尔曲线
      实现n阶贝塞尔曲线,并用鼠标交互实现控制点的生成。
    • 贝塞尔曲线
      // 贝塞尔曲线最大阶数 private static final int REGION_WIDTH = 30; // 合法区域宽度 private static final int FINGER_RECT_SIZE = 60; // 矩形尺寸 private static final int BEZIER_WIDTH = 10; // 贝塞尔...
    • 贝塞尔曲线网络
      关于贝塞尔曲线 贝塞尔曲线网络 该项目是使用版本10.1.2生成的。 开发服务器 为开发服务器运行ng serve 。 导航到http://localhost:4200/ 。 如果您更改任何源文件,该应用程序将自动重新加载。 代码脚手架 运行ng...
    • 贝塞尔曲线
      NULL 博文链接:https://andydufresneone.iteye.com/blog/1179224
    • 贝塞尔曲线
      IOS 贝塞尔曲线 使用自定义控件实现贝塞尔曲线画图
    • 贝塞尔曲线
      贝塞尔曲线的用法,demo,将贝塞尔曲线和绘画,动画的结合使用
    • 贝塞尔曲线
      vs结合easyX实现贝塞尔曲线的绘制,并可以通过鼠标拖拽控制点实现曲线的变化
    • 贝塞尔曲线.zip
      贝塞尔曲线的形成过程,鼠标点击可移动关键点