qt opengl 貝塞爾曲線

2021-09-01 06:34:00 字數 2286 閱讀 5078

opengl3維的貝塞爾曲線和平面的差不多,其實就是2維的貝塞爾曲線經過矩陣轉換得到的。我們可以通過畫多條貝塞爾曲線組合成乙個漂亮的圖形,我實現的是這樣的

其渲染器實現如下

#ifndef bezierrender_h

#define bezierrender_h

#include #include #include #include using bnposition = qpair;

class bezierrender

;#endif // bezierrender_h

#include #include "bezierrender.h"

void bezierrender::inititsize(qvectorpoints, float span, qcolor c)

int steps = static_cast(1.0f/span);

long *jiechengna = new long[n+1];

for(int i = 0; i <= n; i++)

for(int i = 0;i <= steps; i++)

float xf=0;

float yf=0;

float *tka = new float[n+1];

float *otka = new float[n+1];

for(int j = 0; j <= n; j++)

for(int k =0;k<=n;k++)

vertpoints_ << xf << yf << 0.0;

colorpoints_ << c.redf() << c.greenf() << c.bluef();

delete tka;

delete otka;

}qvectoralpoints;

alpoints << vertpoints_ << colorpoints_;

vbo_.create();

vbo_.bind();

vbo_.allocate(alpoints.data(),alpoints.count() * sizeof(glfloat));

delete jiechengna;

}void bezierrender::render(qopenglextrafunctions *f, qmatrix4x4 &pmatrix, qmatrix4x4 &vmatrix, qmatrix4x4 &mmatrix)

long bezierrender::jiecheng(int n)

for(int i = 2; i <= n; i++)

return result;

}

其shader實現如下

#version 330

uniform mat4 upmatrix,uvmatrix,ummatrix;

layout(location = 0) in vec3 aposition;

layout(location = 1) in vec3 acolor;

smooth out vec4 vcolor;

void main(void)

#version 330

in vec4 vcolor;

out vec4 fragcolor;

void main(void)

在使用時,我們需要通過矩陣轉換來畫多條曲線

#ifndef widget_h

#define widget_h

#include #include "bezierrender.h"

class widget : public qopenglwidget

;#endif // widget_h

#include "widget.h"

widget::widget(qwidget *parent)

: qopenglwidget(parent)

widget::~widget()

void widget::resizegl(int w, int h)

void widget::initializegl()

void widget::paintgl()

}

到此結束

貝塞爾曲線

1.概述 貝塞爾曲線 b zier curve 又稱 貝茲曲線或貝濟埃曲線,是應用於二維圖形應用程式的數學曲線。一般的向量圖形 軟體通過它來精確畫出曲線,貝茲曲線由 線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種向量曲線的。貝塞爾曲線是計算機圖形學...

貝塞爾曲線

由於工作需要,最近在研究乙個類似qq訊息劃掉的效果 很多強迫症患者童鞋對這個簡直是愛不釋手,當然這個也包括我自己 貝塞爾曲線就是這樣的一條曲線,它是依據四個位置任意的點座標繪製出的一條 光滑曲線 在歷史上,研究貝塞爾曲線的人最初是按照已知曲線 引數方程 來確定四個點的思路設計出這種向量曲線繪製法。貝...

貝塞爾曲線

貝塞爾曲線在android中運用廣泛,可以用來繪製各類複雜曲線,因為貝塞爾曲線只需要指定控制點,就能繪製出特定的曲線。其次是做點和點的平滑過渡。為什麼可以做到如上兩點,看下面的講解 首先來說,貝塞爾曲線有階的概念,這個階可以理解為控制點,一階的控制點只有兩個。如上是一階的方程,其中t取值為0到1,可...