4次Bezier曲线--计算机图形学 opengl

原创 2018年04月15日 10:33:15

计算机图形学的第一次作业

参考了网上很多代码 但好歹写出来了


#include "GL\glut.h"

#include <math.h>

 

class Point//一个点类,含有x,y坐标

{

public:

       intx, y;

       voidinit(int x1, int y1) {

              x= x1;

              y= y1;

       }

};

 

 

//点的数量

static int PointSum = 0;

 

//四次的bezier曲线共有五个点

static Point points[5];

 

 

void init(void)

{

       glEnable(GL_DEPTH_TEST);

       glMatrixMode(GL_PROJECTION);

       glLoadIdentity();

       gluOrtho2D(0.0,500.0, 0.0, 500.0);

       glMatrixMode(GL_MODELVIEW);

 

}

 

 

//画点

void setPoint(Point p) {

       glBegin(GL_POINTS);

       glVertex2f(p.x,p.y);

       glEnd();

       glFlush();

}

 

// 画线

void setline(Point p1, Point p2) {

       glBegin(GL_LINES);

       glVertex2f(p1.x,p1.y);

       glVertex2f(p2.x,p2.y);

       glEnd();

       glFlush();

}

 

// 计算bezier曲线

Point calculateBezier(Point p0, Point p1,Point p2, Point p3, Point p4, double a) {

       Pointp;

       doubleb1 = pow((1 - a), 4);

       doubleb2 = pow((1 - a), 3) * 4 * a;

       doubleb3 = pow((1 - a), 2) * 6 * a * a;

       doubleb4 = (1 - a)*a*a*a * 4;

       doubleb5 = a * a*a*a;

 

       p.x= b1 * p0.x + b2 * p1.x + b3 * p2.x + b4 * p3.x + b5 * p4.x;

       p.y= b1 * p0.y + b2 * p1.y + b3 * p2.y + b4 * p3.y + b5 * p4.y;

       returnp;

}

 

//display函数

void display()

{

       glClearColor(0.88,0.71, 0.71, 0); //设背景为粉色

       glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); //用glClearClolr设定的颜色值清除缓存区

       glColor3f(0.0,0.0, 0.0);

       glPointSize(5);

       glFlush();

}

 

 

// 鼠标事件

void MouseFunction(int button, int state,int x, int y) {

 

      

       if(state == GLUT_DOWN)

       {

              points[PointSum].init(x,500 - y);

              glColor3f(0.86,0.25, 0.0);     // 设置点的颜色,绘制点

              setPoint(points[PointSum]);

              glColor3f(0.12,0.8, 0.25);// 设置线的颜色,绘制线

              if(PointSum > 0) setline(points[PointSum - 1], points[PointSum]);

              //如果达到了4个绘制bezier曲线,并在之后给计数器清零

              if(PointSum == 4) {

 

                     glColor3f(0.0,0.0, 0.0); // 设定bezier曲线为黑色

 

                     Pointp_current = points[0]; //设为起点

                     for(double t = 0.0; t <= 1.0; t += 0.05)

                     {

                            PointP = calculateBezier(points[0], points[1], points[2], points[3], points[4], t);

                            setline(p_current,P);

                            p_current= P;

                     }

 

                     PointSum= 0;

              }

              else{

                     PointSum++;

              }

       }

}

 

int main(int argc, char *argv[])

{

       glutInit(&argc,argv);

       glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB | GLUT_DEPTH);

       glutInitWindowPosition(0,0);

       glutInitWindowSize(500,500); //确定显示框的大小

       glutCreateWindow("ZZJ的图形学作业1.0");

       init();

       glutMouseFunc(MouseFunction);// 鼠标事件

       glutDisplayFunc(display);

       glutMainLoop();

       return0;

}



OpenGL

-
  • 1970年01月01日 08:00

4次Bezier曲线--计算机图形学 opengl

计算机图形学的第一次作业参考了网上很多代码 但好歹写出来了#include &quot;GL\glut.h&quot;#include &amp;lt;math.h&amp;gt; class Poi...
  • djddwzh
  • djddwzh
  • 2018-04-15 10:33:15
  • 67

使用OpenGL画三次Bezier曲线

#include #include #include #include int SCREEN_HEIGHT = 480; int NUMPOINTS = 0; clas...
  • dreamcs
  • dreamcs
  • 2012-02-01 12:07:00
  • 9713

OPENGL绘制贝塞尔曲线

最终效果图:通过3个点形成一条贝塞尔曲线1. 鼠标问题在使用鼠标获取坐标的时候,要知道鼠标获取的坐标和屏幕坐标是不同的; openGL使用右手坐标 从左到右,x递增 从下到上,y递增 ...
  • qq_28057541
  • qq_28057541
  • 2016-05-03 16:02:23
  • 3049

<em>Bezier</em>曲面

开始学习<em>opengl</em>以及<em>绘制</em>三<em>次Bezier曲线</em> <em>OpenGL</em>: <em>绘制</em>B样条曲线 Bezier曲线曲面...<em>OpenGL</em>编程低级错误及常见问题解答 <em>OpenGL</em>学习笔记(四):曲线曲面 计算机图形学...
  • 2018年04月16日 00:00

OpenGL绘制Bezier曲线

 项目要求: – 使用鼠标在屏幕中任意设置控制点,并生成曲线 – 使用鼠标和键盘的交互操作实现对曲线的修改。 项目总体介绍 本项目利用Bezier曲线生成算法生成可由...
  • zjccoder
  • zjccoder
  • 2015-01-17 18:57:34
  • 5154

OpenGL实现Bezier曲线

Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的。在这组顶点中: (1)只有第一个顶点和最后一个顶点在曲线上; (2)其余的顶点则用于定义曲线的导数、阶次和形状; (3)...
  • yangyong0717
  • yangyong0717
  • 2017-05-02 16:32:12
  • 451

OpenGL实现的Bezier曲线

贝塞尔曲线的是参数曲线,参数在0-1之间,它的计算方法是控制点和伯因斯坦基函数的乘积的求和。 下面是对贝塞尔曲线的实现。   #include #include #define DIMENS...
  • smells2
  • smells2
  • 2011-12-16 21:42:47
  • 3063

计算机图形学-基于OpenGL的绘制Bezier曲线

计算机图形学-基于OpenGL的绘制Bezier曲线本实验集成开发环境为vs2013,基于OpenGL。实验内容根据Bezier曲线的定义,绘制Bezier曲线段。自己编程实现Bernstain基函数...
  • u010968957
  • u010968957
  • 2017-05-28 11:49:42
  • 1392

Bezier曲线的绘制

Bezier曲线是参数多项式曲线,它由一组控制多边形折线(控制多边形)的顶点唯一定义,在控制多边形的各顶点中,只有第一个和最后一个顶点在曲线上,其他的顶点则用以定义曲线的导数,阶次和形状 Bezie...
  • mylovestart
  • mylovestart
  • 2012-12-25 17:18:47
  • 12894
收藏助手
不良信息举报
您举报文章:4次Bezier曲线--计算机图形学 opengl
举报原因:
原因补充:

(最多只允许输入30个字)