利用GLSL繪製曲線

2021-08-29 02:03:02 字數 1826 閱讀 1882

以前的專案裡,我曾經用qwt繪製曲線.qwt是一種基於qt的第三方外掛程式。用qwt繪製的好處是,在待繪製的樣本數較多時(〉=1000),仍然可以在很短的時間內完成繪製。本篇部落格介紹一種辦法,不再利用qwt,而是直接利用glsl來實現高速繪製曲線。這個功能封裝在類glcurve中。

標頭檔案:

#pragma once

#include #include #include #include #include class glcurve : public qopenglwidget, protected qopenglfunctions

;

cpp檔案:

#include "glcurve.h"

glcurve::glcurve(qwidget *parent)

: qopenglwidget(parent)

glcurve::~glcurve()

}void glcurve::initializegl()

\n";

vshader->compilesourcecode(vsrc);

qopenglshader *fshader = new qopenglshader(qopenglshader::fragment, this);

const char *fsrc =

"#version 330\n"

"out vec4 color;\n"

"void main()\n"

"\n";

fshader->compilesourcecode(fsrc);

m_pprogram = new qopenglshaderprogram;

m_pprogram->addshader(vshader);

m_pprogram->addshader(fshader);

m_pprogram->link();

m_pprogram->bind();

m_uivertloc = m_pprogram->attributelocation("pos");

m_pprogram->enableattributearray(m_uivertloc);

glenable(gl_depth_test);

glclearcolor(0.4,0.4,0.4,1);

}void glcurve::paintgl()

}void glcurve::resizegl(int w, int h)

void glcurve::vsetvertices(unsigned char * arrvertices, int icount)

}void glcurve::vsetxbounds(double dleftbound, double drightbound)

void glcurve::vsetybounds(double dlowerbound, double dupperbound)

呼叫時,要先設定橫向和縱向的表數範圍vsetx(y)bounds(),然後把原始資料通過vsetvertices()送入glcurve類:

#include "glcurve.h"

w.vsetxbounds(0, ilen - 1);

w.vsetybounds(0, ilen - 1);

w.vsetvertices(arr, ilen);

w.show();

return a.exec();

}

效果:

MATLAB曲線繪製

一。二維資料曲線圖 1.1 繪製 單根二維曲線 plot 函式的基本呼叫 格式為 plot x,y 其中x和y為長度相同的向量,分別用於儲存x座標 和y座標資料。例1 1 在0 x 2p區間內,繪製曲線 y 2e 0.5xcos 4 x 程式 如下 x 0 pi 100 2 pi y 2 exp 0...

NURBS曲線繪製

工作需要,最近做非均勻b樣條曲線資料庫建立。為養成良好的工作學習習慣,特此作總結,並希望以後在計算機 學上能有更深的造詣,以激勵自己不斷進步。續前,前段時間終於把nurbs調通,甚是高興!nurbs樣條曲線,這期間經過幾次曲折。第一次是參考網上的資料做出了均勻b樣條曲線,後來拿到客戶那裡去,發現大致...

繪製余弦曲線

繪製余弦曲線 在螢幕上用 顯示0 360度的余弦函式cos x 曲線 問題分析與演算法設計 如果在程式中使用陣列,這個問題十分簡單。但若規定不能使用陣列,問題就變得不容易了。關鍵在於余弦曲線在0 360度的區間內,一行中要顯示兩個點,而對一般的顯示器來說,只能按行輸出,即 輸出第一行資訊後,只能向下...