写一个cpp函数,参数有QRect, 图像宽高, 然后转换为opengl可用顶点矩阵
时间: 2023-05-22 12:07:02 浏览: 115
好的,以下是这个函数的实现:
```cpp
#include <QRect>
#include <QVector3D>
QVector<QVector3D> rectToGLVertices(const QRect& rect, int imageWidth, int imageHeight)
{
QVector<QVector3D> vertices;
vertices.reserve(4);
float left = static_cast<float>(rect.left()) / static_cast<float>(imageWidth) * 2.0f - 1.0f;
float right = static_cast<float>(rect.right()) / static_cast<float>(imageWidth) * 2.0f - 1.0f;
float top = -static_cast<float>(rect.top()) / static_cast<float>(imageHeight) * 2.0f + 1.0f;
float bottom = -static_cast<float>(rect.bottom()) / static_cast<float>(imageHeight) * 2.0f + 1.0f;
vertices.push_back(QVector3D(left, bottom, 0.0f)); // 左下角
vertices.push_back(QVector3D(left, top, 0.0f)); // 左上角
vertices.push_back(QVector3D(right, top, 0.0f)); // 右上角
vertices.push_back(QVector3D(right, bottom, 0.0f)); // 右下角
return vertices;
}
```
这个函数会接收一个 QRect 类型的矩形、图像的宽度和高度作为参数,然后返回一个 QVector<QVector3D> 类型的顶点列表,这个列表是 OpenGL 可以使用的。具体来说,这个函数会计算出矩形在图像中的位置,并将其转换为范围在 [-1, 1] 的 OpenGL 坐标系下的顶点。
阅读全文