37 : mSize( new
Qt3DRender::QParameter(
"BB_SIZE", QSizeF( 100, 100 ), this ) )
38 , mViewportSize( new
Qt3DRender::QParameter(
"WIN_SCALE", QSizeF( 800, 600 ), this ) )
40 addParameter( mSize );
41 addParameter( mViewportSize );
44 mTexture2D =
new Qt3DRender::QParameter(
"tex0", QVariant(),
this );
45 addParameter( mTexture2D );
48 Qt3DRender::QBlendEquationArguments *blendState =
new Qt3DRender::QBlendEquationArguments;
49 blendState->setSourceRgb( Qt3DRender::QBlendEquationArguments::SourceAlpha );
50 blendState->setDestinationRgb( Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha );
52 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation;
53 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
56 Qt3DRender::QShaderProgram *shaderProgram =
new Qt3DRender::QShaderProgram(
this );
58 const QUrl urlVert( QStringLiteral(
"qrc:/shaders/billboards.vert" ) );
59 const QUrl urlGeom( QStringLiteral(
"qrc:/shaders/billboards.geom" ) );
65 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( urlVert ) );
66 shaderProgram->setGeometryShaderCode( Qt3DRender::QShaderProgram::loadSource( urlGeom ) );
71 const QByteArray vertexShaderCode = Qt3DRender::QShaderProgram::loadSource( urlVert );
73 shaderProgram->setVertexShaderCode( finalVertexShaderCode );
75 const QByteArray geomShaderCode = Qt3DRender::QShaderProgram::loadSource( urlGeom );
77 shaderProgram->setGeometryShaderCode( finalGeomShaderCode );
82 const QByteArray vertexShaderCode = Qt3DRender::QShaderProgram::loadSource( urlVert );
84 shaderProgram->setVertexShaderCode( finalVertexShaderCode );
86 const QByteArray geomShaderCode = Qt3DRender::QShaderProgram::loadSource( urlGeom );
88 shaderProgram->setGeometryShaderCode( finalGeomShaderCode );
92 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/billboards.frag" ) ) ) );
95 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass(
this );
96 renderPass->setShaderProgram( shaderProgram );
97 renderPass->addRenderState( blendState );
98 renderPass->addRenderState( blendEquation );
101 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey;
102 filterKey->setName( QStringLiteral(
"renderingStyle" ) );
103 filterKey->setValue(
"forward" );
106 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
107 technique->addRenderPass( renderPass );
108 technique->addFilterKey( filterKey );
109 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
110 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
111 technique->graphicsApiFilter()->setMajorVersion( 3 );
112 technique->graphicsApiFilter()->setMinorVersion( 1 );
115 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect(
this );
116 effect->addTechnique( technique );
167 std::unique_ptr< QgsMarkerSymbol > clonedSymbol( markerSymbol->
clone() );
168 clonedSymbol->startRender( context2D );
170 constexpr int BUFFER_SIZE_PIXELS = 2;
172 const QRectF bounds = markerSymbol->
bounds( QPointF( 0, 0 ), context2D );
174 QImage image(
static_cast< int >( std::ceil( bounds.size().width() ) ) + 2 * BUFFER_SIZE_PIXELS,
static_cast< int >( std::ceil( bounds.size().height() ) ) + 2 * BUFFER_SIZE_PIXELS, QImage::Format_ARGB32_Premultiplied );
175 image.fill( Qt::transparent );
177 QPainter painter( &image );
180 clonedSymbol->renderPoint( QPointF( -bounds.left() + BUFFER_SIZE_PIXELS, -bounds.top() + BUFFER_SIZE_PIXELS ),
nullptr, context2D, -1, selected );
184 clonedSymbol->stopRender( context2D );
Rendering context for preparation of 3D entities.
QColor selectionColor() const
Returns color used for selected features.
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
Holds an image that can be used as a texture in the 3D view.
Contains information about the context of a rendering operation.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected).
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
void setSelectionColor(const QColor &color)
Sets the color to use when rendering selected features.