【问题标题】:QPainter break coordinate system in OpenGlOpenGL中的QPainter中断坐标系
【发布时间】:2018-10-16 13:15:00
【问题描述】:

我想通过点击选择对象上的点

成功实现

this->camera()->convertClickToLine(point, orig, dir);
bool found;
selectedPoint = this->camera()->pointUnderPixel(point, found);

if (selectedName() >= 0) {
glColor3f(0.9f, 0.2f, 0.1f);
glBegin(GL_POINTS);
glVertex3f(selectedPoint.x, selectedPoint.y, selectedPoint.z);
glEnd();
}

可选对象示例:

glBegin(GL_TRIANGLES);
glColor3f(0.5,0,0);
glVertex3f(xmin,ymin,zmin);
glVertex3f(xmin + (xmax-xmin)/2,ymin+(ymax-ymin)/2, zmin+(zmax-zmin)/2);
glVertex3f(xmax,ymin,zmin);
glEnd();

但是如果我开始使用 QPainter,selectedPoint 会改变坐标到 smth 错误

QPainter painter(this);
painter.setPen(Qt::black);
painter.setFont(QFont("Helvetica", 8));
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
painter.drawText(textPosX + 10, textPosY, text);
painter.setBrush(QBrush(Qt::black, Qt::SolidPattern));
painter.drawEllipse(QPoint(textPosX, textPosY), 2, 2);
painter.end();

我该怎么办?

我的步骤:

  1. 我用 OpenGl 画框和对象

  2. 我用 Qpainter 绘制对象名称

  3. 我通过单击在对象上绘制点(由于前一项而不起作用,如果我评论第 2 项,一切正常)

【问题讨论】:

  • Painter 使用小部件坐标系... top,left 是原点,向左、下增加其 x,y 值...
  • @ΦXocę 웃 Пepeúpa ツ 是的,ty。但是为什么在painter.end()之后,当我使用 italic bold if (selectedName() >= 0) { glColor3f(0.9f, 0.2f, 0.1f); glBegin(GL_POINTS); glVertex3f(selectedPoint.x, selectedPoint.y, selectedPoint.z); qDebug()<<selectedPoint.x<<selectedPoint.y<<selectedPoint.z; glEnd(); } opengl 继续使用小部件坐标系?

标签: c++ qt opengl


【解决方案1】:

解决了

glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();

/QPainter/

glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多