• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: opengl  bezier  

资源简介

opengl动态显示贝塞尔曲线,动画展示贝塞尔曲线四个控制点对曲线的控制。

资源截图

代码片段和文件信息

#define GLUT_DISABLE_ATEXIT_HACK
#include 
#include 
#include 

GLint nNumPoints = 4;
GLint x1=-4 x2=-1 x3=-1 x4=4
      y1=-4 y2=1 y3=-1 y4=4 
  z1=0 z2=0 z3=0 z4=0;
//4个控制点的3D坐标——z坐标全为0
GLfloat ctrlPoints[4][3] = {
{ x1 y1 z1 }{ x2 y2 z2 }{ x3 y3 z3 }{ x4 y4 z4 }
};

void init(void)
{
//背景色
glClearColor(0.0 0.0 0.0 1.0);
//建立一个一维求值器并启动求值器

glMap1f(GL_MAP1_VERTEX_3 // 产生的数据类型
0.0f         // 参数最小值
100.0f // 参数最大值
3              //控制点间的步幅(以GLfloat个数度量)
nNumPoints // 控制点数目
&ctrlPoints[0][0]);          // 保存控制点的数组
glEnable(GL_MAP1_VERTEX_3);  //启动求值器

glShadeModel(GL_FLAT);

//反走样

glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);  //允许直线反走样
glHint(GL_LINE_SMOOTH_HINT GL_FASTEST);  // Antialias the lines
glBlendFunc(GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA);

}

void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();
glColor3f(1.0 1.0 0.0);
//映射曲线,选择u并计算曲线上的点
glMapGrid1d(100 0.0 100.0);  //等分区间
glEvalMesh1(GL_LINE 0 100);  //用求值器计算曲线上点的值,并画图
   /* 显示控制点 */
glPointSize(5.0);
glBegin(GL_POINTS);
for (i = 0; i < 4; i++)
glVertex3fv(&ctrlPoints[i][0]);
glEnd();
glutSwapBuffers();
}
void vertexPoint(void) {

评论

共有 条评论