写一个cpp函数,参数有QRect, 图像宽高, 然后转换为opengl可用顶点矩阵, 结果以GLfloat数组返回
时间: 2023-05-22 08:07:08 浏览: 108
好的,我可以回答这个问题。以下是 cpp 函数的代码:
```cpp
#include <QRect>
#include <QVector>
QVector<GLfloat> convertToOpenGLVertices(QRect rect, int imageWidth, int imageHeight)
{
// 计算矩形左下角和右上角对应的 OpenGL 坐标
GLfloat x1 = static_cast<GLfloat>(rect.left()) * 2 / imageWidth - 1;
GLfloat y1 = static_cast<GLfloat>(rect.bottom()) * 2 / imageHeight - 1;
GLfloat x2 = static_cast<GLfloat>(rect.right()) * 2 / imageWidth - 1;
GLfloat y2 = static_cast<GLfloat>(rect.top()) * 2 / imageHeight - 1;
// 构造顶点数组并返回
QVector<GLfloat> vertices = { x1, y1, x2, y1, x2, y2, x1, y2 };
return vertices;
}
```
该函数接受一个 QRect 类型的矩形,以及图像的宽度和高度作为参数,并返回一个 GLfloat 数组,其中包含指定矩形的 OpenGL 可用顶点。
相关问题
写一个cpp函数,参数有QRect, 图像宽高, 然后转换为opengl可用顶点矩阵, 结果放入GLfloat*
好的,下面是将给定的QRect和图像宽高转换为opengl可用的顶点矩阵的cpp函数:
```cpp
void transformQRectToOpenGLVertices(QRect rect, int imageWidth, int imageHeight, GLfloat* vertices) {
// 计算rect的四个顶点的坐标
float leftX = (float)rect.left() / (float)imageWidth * 2.0f - 1.0f;
float rightX = (float)(rect.right() + 1) / (float)imageWidth * 2.0f - 1.0f;
float topY = 1.0f - (float)rect.top() / (float)imageHeight * 2.0f;
float bottomY = 1.0f - (float)(rect.bottom() + 1) / (float)imageHeight * 2.0f;
// 将四个顶点的坐标存入vertices数组
vertices[0] = leftX; vertices[1] = topY;
vertices[2] = leftX; vertices[3] = bottomY;
vertices[4] = rightX; vertices[5] = bottomY;
vertices[6] = rightX; vertices[7] = topY;
}
```
可以将结果存入提供的GLfloat数组中。顶点顺序为左上角,左下角,右下角和右上角。
写一个cpp函数,参数有QRect, 图像宽高, 然后转换为opengl可用顶点矩阵
好的,以下是这个函数的实现:
```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 坐标系下的顶点。
阅读全文