39 const QVector3D delta = p2 - p1;
40 const float distance = delta.length();
41 if (distance < 1e-6f) {
42 qCDebug(Viewer3DInstancingLog) <<
"Skipping degenerate line segment (length < 1e-6)";
47 const float radius = lineWidth * 0.1f;
48 const QVector3D position = (p1 + p2) * 0.5f;
49 const QVector3D scale(radius / 50.0f, distance / 100.0f, radius / 50.0f);
51 const QVector3D yAxis(0.0f, 1.0f, 0.0f);
52 const QQuaternion rotation = QQuaternion::rotationTo(yAxis, delta.normalized());
54 _entries.append({position, scale, rotation, color});
82 _instanceData.clear();
83 for (
int i = 0; i < _entries.size(); ++i) {
84 const auto &entry = _entries[i];
85 const QColor color = (i == _selectedIndex) ? kHighlightColor : entry.color;
86 auto tableEntry = calculateTableEntry(entry.position, entry.scale, entry.rotation.toEulerAngles(), color);
87 _instanceData.append(
reinterpret_cast<const char *
>(&tableEntry),
sizeof(tableEntry));
93 *instanceCount = _entries.size();