カスタム イメージをテクスチャとして持つエンティティを Qt3D で作成したいと考えています。QPaintedTextureImage (詳細については、Qt 5.9 バージョンへのリンク。5.8 のドキュメントはこちら)に出会いました。これは QPainterで記述できますが、方法がわかりません。まず、これはエンティティが次のように見えると私が想像する方法です。
[編集]: コードが編集され、動作するようになりました!
planeEntity = new Qt3DCore::QEntity(rootEntity);
planeMesh = new Qt3DExtras::QPlaneMesh;
planeMesh->setWidth(2);
planeMesh->setHeight(2);
image = new TextureImage; //see below
image->setSize(QSize(100,100));
painter = new QPainter;
image->paint(painter)
planeMaterial = new Qt3DExtras::QDiffuseMapMaterial;
planeMaterial->diffuse()->addTextureImage(image);
planeEntity->addComponent(planeMesh);
planeEntity->addComponent(planeMaterial);
TextureImage は、ペイント機能を持つサブクラス化された QPaintedTextureImage です。
class TextureImage : public Qt3DRender::QPaintedTextureImage
{
public:
void paint(QPainter* painter);
};
planeEntity に大きな円を描画したいだけの場合、ペイント関数に渡された QPainter は、ペイントの実装で何をする必要がありますか?
[編集] 実装:
void TextureImage::paint(QPainter* painter)
{
//hardcoded values because there was no device()->width/heigth
painter->fillRect(0, 0, 100, 100, QColor(255, 255, 255));
/* Set pen and brush to whatever you want. */
painter->setPen(QPen(QBrush(QColor(255, 0, 255)) ,10));
painter->setBrush(QColor(0, 0, 255));
/*
* Draw a circle (or an ellipse -- the outcome depends very much on
* the aspect ratio of the bounding rectangle amongst other things).
*/
painter->drawEllipse(0, 0, 100, 100);
}