我正在尝试OpenGL ES 2.0的hello三角形示例。我使用的是Qt,所以我创建了一个QGraphicsScene,并将该代码添加为QGraphicsItem。它画得很正确,但我不能正确地得到边界矩形。三角形顶点为
GLfloat afVertices[] =
{-0.4f,-0.4f,0.0f,
0.4f ,-0.4f,0.0f,
0.0f ,0.4f ,0.0f};
我的视口是glViewport(0, 0, 800, 480);
什么是正确的边界直角坐标?
我将视口设置为QGLWidget。QGraphicsItem的问题是,我必须重新实现项目的边界矩形,如果我只使用
QRectF myGraphicsItem::boundingRect() const
{
return QGraphicsItem::boundingRect();
}
它说对`QGraphicsItem::boundingRect()const'的未定义引用
我最初使用
QRectF myGraphicsItem::boundingRect() const
{
return QRectF(-0.4, -0.4, 0.8, 0.8);
}
但是结果是一个非常小的边界框。看似正确的一个是在我反复尝试使用QRectf(300, 200, 200, 200)
这样的值时创建的,这太"手动"了,所以我想知道可能存在某种我不知道的坐标对应或变换。
QGraphicsItem::boundingRect()
是一个纯虚拟函数。因此,没有执行。您必须提供自己的实现。根据你的顶点,可能是
QRectF myGraphicsItem::boundingRect() const
{
return QRectF(-0.4, -0.4, 0.8, 0.8);
}
我不确定我是否理解,如果您使用QGraphicsItem(带或不带OpenGL视口),通常会使用QGraphicsItem::boundingRect()来获取边界矩形?
我会做(在Python中):
# inside class
def parentBoundingRect(self):
return self.mapToParent(self.boundingRect()).boundingRect()
# or if that doesn't work
def parentBoundingRect(self):
pos = self.pos()
rect = self.transform().mapToPolygon(self.boundingRect()).boundingRect()
return QRectF(pos.x(), pos.y(), rect.width(), rect.height())
# or if that doesn't work, keep playing with it til it does! :)