最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用OpenGL繪制Bezier曲線

 更新時間:2020年04月20日 15:36:01   作者:dreamcs  
這篇文章主要為大家詳細介紹了使用OpenGL繪制Bezier曲線的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了OpenGL繪制Bezier曲線的具體代碼,供大家參考,具體內(nèi)容如下

最近在看Francis S Hill ,Jr 和 Stephen M Kelley合著的《計算機圖形學》(OpenGL版)(第三版)書中有繪制三個控制點的Bezier曲線的代碼。自己重新敲了一遍代碼。發(fā)現(xiàn)了其中的一點小錯誤,修正過來了。并做了一點小小的改動。

源碼見下

#include <windows.h>
#include <math.h>
#include <gl/GL.h>
#include <gl/glut.h>
int SCREEN_HEIGHT = 480;
int NUMPOINTS = 0;
class Point
{
public:
 float x, y;
 void setxy(float x2, float y2)
 {
 x = x2;
 y = y2;
 }
 Point operator&(const Point & rPoint)
 {
 x = rPoint.x;
 y = rPoint.y;
 return * this;
 }
};
Point abc[3];
void myInit()
{
 glClearColor(0.0,0.0,0.0,0.0);
 glColor3f(1.0f, 0.0, 0.0);
 glPointSize(4.0);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluOrtho2D(0.0, 640, 0.0, 480.0);
}
void drawDot(Point pt) 
{
 glBegin(GL_POINTS);
 glVertex2f(pt.x, pt.y);
 glEnd();
 glFlush();
}
void drawLine(Point p1, Point p2)
{
 glBegin(GL_LINES);
 glVertex2f(p1.x, p1.y);
 glVertex2f(p2.x, p2.y);
 glEnd();
 glFlush();
}
//三個控制點的貝塞爾曲線
Point drawBezier(Point A, Point B, Point C, double t) 
{
 Point P;
 P.x = pow((1-t), 2) * A.x + 2*t*(1-t)*B.x + pow(t, 2)*C.x;
 P.y = pow((1-t), 2) * A.y + 2*t*(1-t)*B.y + pow(t, 2)*C.y;
 return P;
}
void myMouse(int button, int state, int x, int y)
{
 if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
 {
 abc[NUMPOINTS].setxy((float)x, (float)(SCREEN_HEIGHT - y));
 NUMPOINTS++;
 if (NUMPOINTS == 3)
 {
  glColor3f(1.0, 0.0, 1.0);
  
  drawDot(abc[0]);
  drawDot(abc[1]);
  drawDot(abc[2]);
  glColor3f(1.0, 1.0, 0.0);
  drawLine(abc[0], abc[1]);
  drawLine(abc[1], abc[2]);
  glColor3f(0.0, 1.0, 1.0);
  Point POld = abc[0];
  for (double t = 0.0; t<=1.0;t+=0.1)
  {
  Point P = drawBezier(abc[0], abc[1], abc[2], t);
  drawLine(POld, P);
  POld = P;
  }
  glColor3f(1.0, 0.0, 0.0);
  NUMPOINTS = 0;
 }
 }
}
void myDisplay()
{
 glClear(GL_COLOR_BUFFER_BIT);
 glFlush();
}
int main(int argc, char * agrv[])
{
 glutInit(&argc, agrv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 glutInitWindowSize(640, 480);
 glutInitWindowPosition(100, 150);
 glutCreateWindow("Bezier Curve");
 glutMouseFunc(myMouse);
 glutDisplayFunc(myDisplay);
 myInit();
 glutMainLoop();
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 讓應(yīng)用程序只運行一個實例的實現(xiàn)方法

    讓應(yīng)用程序只運行一個實例的實現(xiàn)方法

    我們在使用《360軟件管家》時發(fā)現(xiàn),在《360軟件管家》已經(jīng)運行了的情況下,再次點擊《360軟件管家》的圖標,那么它不會再運行另外一個《360軟件管家》,而是將已有的《360軟件管家》給激活,始終只能運行一個《360軟件管家》的實例
    2013-05-05
  • C++小知識:不要節(jié)約代碼行數(shù)

    C++小知識:不要節(jié)約代碼行數(shù)

    今天小編就為大家分享一篇關(guān)于C++小知識:不要節(jié)約代碼行數(shù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Easyx實現(xiàn)掃雷游戲

    Easyx實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了Easyx實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 利用C++和QT實現(xiàn)Log自定義日志系統(tǒng)

    利用C++和QT實現(xiàn)Log自定義日志系統(tǒng)

    這篇文章主要為大家詳細介紹了如何利用C++和QT實現(xiàn)Log自定義日志系統(tǒng),文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2023-12-12
  • 用QT實現(xiàn)計時器功能

    用QT實現(xiàn)計時器功能

    這篇文章主要為大家詳細介紹了用QT實現(xiàn)計時器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言中的正則表達式使用示例詳解

    C語言中的正則表達式使用示例詳解

    正則表達式是使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。本文通過示例代碼給大家介紹了C語言中的正則表達式使用,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • c++11 atomic的使用詳解

    c++11 atomic的使用詳解

    這篇文章主要介紹了c++11 atomic的使用詳解,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-02-02
  • 詳解c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高)

    詳解c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高)

    這篇文章主要介紹了c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高),設(shè)計一個內(nèi)存池,要求效率比系統(tǒng)調(diào)用的效率要高(測試1萬次),同時支持一個線程申請,另外一個線程釋放,需要的朋友可以參考下
    2024-02-02
  • C++?多線程編程pthread的基本使用詳解

    C++?多線程編程pthread的基本使用詳解

    在C++開發(fā)中,原生的線程庫主要有兩個,一個是C++11提供的<thread>(std::thread類),另一個是Linux下的<pthread.h>(p_thread類),本文主要介紹pthread的基本使用方式,需要的朋友可以參考下
    2024-05-05
  • C語言中文件常見操作的示例詳解

    C語言中文件常見操作的示例詳解

    FILE為C語言提供的文件類型,它是一個結(jié)構(gòu)體類型,用于存放文件的相關(guān)信息。本文主要為大家介紹下C語言中幾個常見的文件操作的實現(xiàn),需要的可以參考一下
    2022-12-12

最新評論

工布江达县| 丰都县| 景泰县| 齐齐哈尔市| 松江区| 北流市| 冀州市| 江油市| 南和县| 泗洪县| 从江县| 博乐市| 和平区| 清徐县| 云林县| 叶城县| 麻江县| 盈江县| 宣威市| 彰化县| 合阳县| 大邑县| 宣城市| 浦东新区| 炎陵县| 长治市| 隆尧县| 城固县| 竹山县| 观塘区| 汉源县| 田东县| 会泽县| 繁峙县| 新乡市| 澳门| 晋宁县| 仁寿县| 唐海县| 桦川县| 兴山县|