dispmap/svpointcloudviewer.cpp

71 lines
2.3 KiB
C++
Raw Normal View History

2014-07-25 11:32:00 +04:00
#include "svpointcloudviewer.h"
2014-07-28 00:04:18 +04:00
#include <QtGui/QOpenGLShaderProgram>
#include <QtGui/QOpenGLContext>
2014-07-25 11:32:00 +04:00
SvPointCloudViewer::SvPointCloudViewer(QQuickItem *parent) :
2014-07-28 00:04:18 +04:00
QQuickPaintedItem(parent)
2014-07-25 11:32:00 +04:00
{
2014-07-28 00:04:18 +04:00
setRenderTarget(QQuickPaintedItem::FramebufferObject);
2014-07-25 11:32:00 +04:00
}
2014-07-28 00:04:18 +04:00
void SvPointCloudViewer::paint(QPainter *painter)
2014-07-25 11:32:00 +04:00
{
2014-07-28 00:04:18 +04:00
painter->beginNativePainting();
2014-07-25 11:32:00 +04:00
2014-07-28 00:04:18 +04:00
if (!m_program) {
m_program = new QOpenGLShaderProgram();
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex,
"attribute highp vec4 vertices;"
"varying highp vec2 coords;"
"void main() {"
" gl_Position = vertices;"
" coords = vertices.xy;"
"}");
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment,
"uniform lowp float t;"
"varying highp vec2 coords;"
"void main() {"
" lowp float i = 1. - (pow(abs(coords.x), 4.) + pow(abs(coords.y), 4.));"
" i = smoothstep(t - 0.8, t + 0.8, i);"
" i = floor(i * 20.) / 20.;"
" gl_FragColor = vec4(coords * .5 + .5, i, i);"
"}");
m_program->bindAttributeLocation("vertices", 0);
m_program->link();
2014-07-25 11:32:00 +04:00
}
2014-07-28 00:04:18 +04:00
m_program->bind();
2014-07-25 11:32:00 +04:00
2014-07-28 00:04:18 +04:00
m_program->enableAttributeArray(0);
float values[] = {
-1, -1,
1, -1,
-1, 1,
1, 1
};
m_program->setAttributeArray(0, GL_FLOAT, values, 2);
m_program->setUniformValue("t", (float) 1);
glViewport(0, 0, width(), height());
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
m_program->disableAttributeArray(0);
m_program->release();
painter->endNativePainting();
2014-07-25 11:32:00 +04:00
}
2014-07-28 00:04:18 +04:00