Qt Quick 3D - Simple Skinning Example▲
Sélectionnez
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SKINGEOMETRY_H
#define SKINGEOMETRY_H
#include <QtQuick3D/qquick3d.h>
#include <QtQuick3D/qquick3dgeometry.h>
#include <QVector3D>
#include <QtCore/QList>
class
SkinGeometry : public
QQuick3DGeometry
{
Q_OBJECT
QML_NAMED_ELEMENT(SkinGeometry)
Q_PROPERTY(QList&
lt;QVector3D&
gt; positions READ positions WRITE setPositions NOTIFY positionsChanged)
Q_PROPERTY(QList&
lt;qint32&
gt; joints READ joints WRITE setJoints NOTIFY jointsChanged)
Q_PROPERTY(QList&
lt;float
&
gt; weights READ weights WRITE setWeights NOTIFY weightsChanged)
Q_PROPERTY(QList&
lt;quint32&
gt; indexes READ indexes WRITE setIndexes NOTIFY indexesChanged)
public
:
SkinGeometry(QQuick3DObject *
parent =
nullptr
);
QList&
lt;QVector3D&
gt; positions() const
;
QList&
lt;qint32&
gt; joints() const
;
QList&
lt;float
&
gt; weights() const
;
QList&
lt;quint32&
gt; indexes() const
;
public
Q_SLOTS:
void
setPositions(const
QList&
lt;QVector3D&
gt; &
amp;positions);
void
setJoints(const
QList&
lt;qint32&
gt; &
amp;joints);
void
setWeights(const
QList&
lt;float
&
gt; &
amp;weights);
void
setIndexes(const
QList&
lt;quint32&
gt; &
amp;indexes);
Q_SIGNALS
:
void
positionsChanged();
void
jointsChanged();
void
weightsChanged();
void
indexesChanged();
protected
:
QSSGRenderGraphObject *
updateSpatialNode(QSSGRenderGraphObject *
node) override
;
private
:
QList&
lt;QVector3D&
gt; m_positions;
QList&
lt;qint32&
gt; m_joints;
QList&
lt;float
&
gt; m_weights;
QList&
lt;quint32&
gt; m_indexes;
bool
m_vertexDirty =
false
;
bool
m_indexDirty =
false
;
QByteArray m_vertexBuffer;
QByteArray m_indexBuffer;
}
;
#endif
// SKINGEOMETRY_H