Je développe une application utilisant Qt3D et ai besoin d'accéder à des données de vertex brutes via C++. J'utilise le QObjectPicker
pour raypointing, mais comme les données sont spécialisées (j'ai développé un importateur qui ajoute un attribut supplémentaire à chaque sommet contenant une lecture de température) je ne peux pas utiliser QObjectPicker
pour lire les données du point commodément.Qt3D lisant des données de vertex brutes à partir de QGeometry
L'objet 3D est en cours de chargement via QMesh
donc je crois que la meilleure façon d'accéder aux données brutes est QMesh
membre QGeometry
. Corrige moi si je me trompe. QGeometry
a un vecteur de QAttribute
qui détiennent les attributs vertex. (Encore une fois, corrigez-moi si je me trompe.) De ce point, je ne suis pas sûr de savoir comment lire les données d'un index de vertex spécifique. Ma conjecture est que je dois lire les données de QAttribute::buffer
à une certaine position en sachant quelle est la taille de chaque morceau de données de vertex et en lisant le décalage de cela, mais comment ferais-je cela ici?
C'est ce que je suis venu avec jusqu'à présent.
void ES3DScene::handlePickerClicked(QPickEvent *pick)
{
QPickTriangleEvent *trianglePick = qobject_cast<QPickTriangleEvent*>(pick);
// I'd like to get the vertex data from vertex1Index's position.
qDebug() << "Clicked " << trianglePick->vertex1Index();
QGeometry *geometry = m_mesh->geometry();
auto attributes = geometry->attributes();
for (auto i = 0; i < attributes.count(); ++i)
{
if (attributes.at(i)->name() == QAttribute::defaultPositionAttributeName())
{
QAttribute *attribute = attributes.at(i);
qDebug() << "Attrib " << attribute;
//This is where I'm stuck. I need to read the vertex attributes for the
//vertex at trianglePick->vertex1Index();
break;
}
}
}
Excellent. On dirait que ça va le faire. Peu de temps avant de répondre, j'ai trouvé une autre voie très similaire. –