我在QGraphicsItem工作了很长时间,它有transform()功能。现在,我不打算用QQuickItem做同样的事情,但不幸的是,它错过了transform()。那么,我的问题--如何得到QQuickItem的变换矩阵?
发布于 2017-09-29 08:24:58
下面是一个正确的解决方案,基于迈克尔之前提供的代码,但实际上已经修复了,所以您不必花20分钟来研究如何使用QQmlListProperty
QMatrix4x4 YourQQuickItem::get_model_matrix() {
QMatrix4x4 result;
// Compose model matrix from our transform properties in the QML
QQmlListProperty<QQuickTransform> transformations = transform();
const int count = transformations.count(&transformations);
for (int i=0; i<count; i++) {
QQuickTransform *transform = transformations.at(&transformations, i);
transform->applyTo(&result);
}
return result;
}在我的用例中,我用它得到对象的模型矩阵,然后与视图和投影矩阵相乘,计算模型-视图-投影矩阵。
发布于 2015-02-16 06:52:19
QSGTransformNode类在场景图中实现转换。在updatePaintNode函数中,参数updatePaintNodeData提供了指向与此QQuickItem关联的QSGTransformNode的指针。
QSGNode *MyQuickItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data)
{
QSGTransformNode *transformNode = data->transformNode;
qDebug() << transformNode->matrix();https://stackoverflow.com/questions/28535528
复制相似问题