亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用OpenGL繪制Bezier曲線

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

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

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

源碼見下

#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();
}
//三個(gè)控制點(diǎn)的貝塞爾曲線
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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 適合初學(xué)者的C語言常量類型的講解

    適合初學(xué)者的C語言常量類型的講解

    常量是固定值,在程序執(zhí)行期間不會(huì)改變。這些固定的值,又叫做字面量。常量可以是任何的基本數(shù)據(jù)類型,比如整數(shù)常量、浮點(diǎn)常量、字符常量,或字符串字面值,也有枚舉常量。常量就像是常規(guī)的變量,只不過常量的值在定義后不能進(jìn)行修改
    2022-04-04
  • Opencv使用鼠標(biāo)任意形狀的摳圖

    Opencv使用鼠標(biāo)任意形狀的摳圖

    這篇文章主要為大家詳細(xì)介紹了Opencv使用鼠標(biāo)任意形狀的摳圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C語言修煉之路初識(shí)分支句?循環(huán)助本心下篇

    C語言修煉之路初識(shí)分支句?循環(huán)助本心下篇

    現(xiàn)實(shí)生活中我們經(jīng)常需要根據(jù)不同的條件做出不同的選擇。程序設(shè)計(jì)中也需要根據(jù)條件來選擇不同的程序進(jìn)行處理,這稱之為分支結(jié)構(gòu),當(dāng)條件表達(dá)式不存在時(shí),它被假設(shè)為真。您也可以設(shè)置一個(gè)初始值和增量表達(dá)式,一般情況下,C?程序員偏向于使用?for(;;)?結(jié)構(gòu)來表示一個(gè)無限循環(huán)
    2022-03-03
  • 關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)

    關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于C++STL string類的介紹及模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下面具體的文章內(nèi)容
    2021-09-09
  • C++ 約瑟夫環(huán)問題案例詳解

    C++ 約瑟夫環(huán)問題案例詳解

    這篇文章主要介紹了C++ 約瑟夫環(huán)問題案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++控制臺(tái)實(shí)現(xiàn)貪吃蛇游戲

    C++控制臺(tái)實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼

    C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼

    本篇文章是對(duì)C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 深入分析C++中deque的使用

    深入分析C++中deque的使用

    本篇文章介紹了,深入分析C++中deque的使用。需要的朋友參考下
    2013-05-05
  • C++中vector迭代器失效問題詳解

    C++中vector迭代器失效問題詳解

    vector是向量類型,它可以容納許多類型的數(shù)據(jù),如若干個(gè)整數(shù),所以稱其為容器,這篇文章主要給大家介紹了關(guān)于C++中vector迭代器失效問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 最短時(shí)間學(xué)會(huì)基于C++實(shí)現(xiàn)DFS深度優(yōu)先搜索

    最短時(shí)間學(xué)會(huì)基于C++實(shí)現(xiàn)DFS深度優(yōu)先搜索

    常見使用深度優(yōu)先搜索(DFS)以及廣度優(yōu)先搜索(BFS)這兩種搜索,今天我們就來講講什么是深度優(yōu)先搜索,感興趣的可以了解一下
    2021-08-08

最新評(píng)論