使用Qt和OpenGL将三维点正交投影到二维坐标

以下是使用Qt平台和C++语言编写的代码示例,用于将三维空间坐标系上的点进行正交投影转换为二维坐标:

#include <QtGui>
#include <QtOpenGL>

class GLWidget : public QGLWidget {
public:
    GLWidget(QWidget *parent = 0) : QGLWidget(parent) {}

protected:
    void initializeGL() {
        glClearColor(0, 0, 0, 1);
    }

    void resizeGL(int width, int height) {
        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        if (width > height)
            glOrtho(-1.0, 1.0, -1.0 * height / width, 1.0 * height / width, -10.0, 10.0);
        else
            glOrtho(-1.0 * width / height, 1.0 * width / height, -1.0, 1.0, -10.0, 10.0);

        glMatrixMode(GL_MODELVIEW);
    }

    void paintGL() {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();

        // 绘制三维点
        glColor3f(1, 1, 1);
        glPointSize(5);
        glBegin(GL_POINTS);
        for (int i = 0; i < numPoints; ++i) {
            glVertex3f(pointsX[i], pointsY[i], pointsZ[i]);
        }
        glEnd();
    }

private:
    float pointsX[100]; // 存放x坐标的数组
    float pointsY[100]; // 存放y坐标的数组
    float pointsZ[100]; // 存放z坐标的数组
    int numPoints;      // 点的数量
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    GLWidget widget;
    widget.show();

    return app.exec();
}

在上述代码中,我们在GLWidget类中重写了initializeGLresizeGLpaintGL函数,分别用于初始化OpenGL环境、设置视口和绘制三维点。你可以将你的x、y和z坐标数据填充到pointsXpointsYpointsZ数组中,并将点的数量更新到numPoints变量中。

这段代码使用Qt的OpenGL模块绘制图形,并采用正交投影的方式将三维点转换为二维坐标。在resizeGL函数中,我们根据窗口的宽高比例设置了正交投影矩阵,以保证在不同窗口大小下的正确显示。

你可以将该代码放入一个Qt工程中,然后构建和运行该工程,即可看到绘制出的二维坐标图形。

使用Qt和OpenGL将三维点正交投影到二维坐标

原文地址: https://www.cveoy.top/t/topic/XGQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录