如何在 QML 场景上绘制 3D 线?
How to draw 3D lines onto a QML scene?
我尝试将Bullet Physics的调试绘图接口集成到QML中,所以我必须实现一个drawLine()
方法。
void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color);
我尝试的是从 QQuickItem3D 和 btIDebugDraw 继承了场景中使用的一个项目。在 drawLine()
中,我将这些行添加到一个成员向量中。在 Qt 的 drawItem()
中,我遍历线条并使用 OpenGL 调用来渲染它们。但是,它们不会出现在屏幕上。
如何在 3D space 和正确的相机视图中绘制线条?
void DebugDrawer::drawItem(QGLPainter *painter)
{
if (lines_.size() < 1)
return;
// Draw current lines
painter->modelViewMatrix().push();
glBegin(GL_LINES);
for (auto &line : lines_) {
glColor3f(line.color.getX(), line.color.getY(), line.color.getZ());
glVertex3f(line.from.getX(), line.from.getY(), line.from.getZ());
glVertex3f(line.to.getX(), line.to.getY(), line.to.getZ());
}
glEnd();
painter->modelViewMatrix().pop();
// Reset buffer
lines_.clear();
}
我最终使用了 QtQuick 的行 class 并使用 Bullet 的 flushLines()
方法中的 setVertices()
设置了它的顶点。
我尝试将Bullet Physics的调试绘图接口集成到QML中,所以我必须实现一个drawLine()
方法。
void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color);
我尝试的是从 QQuickItem3D 和 btIDebugDraw 继承了场景中使用的一个项目。在 drawLine()
中,我将这些行添加到一个成员向量中。在 Qt 的 drawItem()
中,我遍历线条并使用 OpenGL 调用来渲染它们。但是,它们不会出现在屏幕上。
如何在 3D space 和正确的相机视图中绘制线条?
void DebugDrawer::drawItem(QGLPainter *painter)
{
if (lines_.size() < 1)
return;
// Draw current lines
painter->modelViewMatrix().push();
glBegin(GL_LINES);
for (auto &line : lines_) {
glColor3f(line.color.getX(), line.color.getY(), line.color.getZ());
glVertex3f(line.from.getX(), line.from.getY(), line.from.getZ());
glVertex3f(line.to.getX(), line.to.getY(), line.to.getZ());
}
glEnd();
painter->modelViewMatrix().pop();
// Reset buffer
lines_.clear();
}
我最终使用了 QtQuick 的行 class 并使用 Bullet 的 flushLines()
方法中的 setVertices()
设置了它的顶点。