返回

qOpenGLWidget学习笔记

目录

创建工程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
find_package(Qt5 COMPONENTS
  Core
  Gui
  Widgets
        OpenGL
  REQUIRED)

target_link_libraries(untitled2 PRIVATE
        Qt5::Core
        Qt5::Gui
        Qt5::Widgets
        Qt5::OpenGL
)

if(WIN32)
    target_link_libraries(untitled2 PRIVATE opengl32.lib)
endif()
1
2
3
4
5
6
7
8
9
#include <QOpenGLWidget>
class qopenglwiget : public QOpenGLWidget {
Q_OBJECT

public:
	...
    virtual void initializeGL() override;
    virtual void paintGL() override;
    virtual void resizeGL(int w, int h) override;

老版本写法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void qopenglwiget::initializeGL() {
    initializeOpenGLFunctions();
}
void qopenglwiget::resizeGL(int w,int h) {
    glViewport(0,0,w,h);//startPoint->endPoint没有高dpi兼容性
}
void qopenglwiget::paintGL() {
    glBegin(GL_TRIANGLES);//设置绘制方法
    glVertex3f(-1.0f,-1.0f,0.0f);//x,y,z.(0,0,0)为三维空间的
    glVertex3f(1.0f,-1.0f,0.0f);
    glVertex3f(0.0f,1.0f,0.0f);
    glEnd();
}

tip

(0, 0, 0) 是否为窗口中点,取决于投影矩阵和视口设置。
在默认的正交投影和视口设置下,(0, 0, 0) 才会对应窗口的中点。
如果使用透视投影(glFrustum 或现代 OpenGL 的投影矩阵),(0, 0, 0) 通常不会直接对应窗口的中点

VAO写法(VertexArrayObject)

绘制一个三角形

Licensed under CC BY-NC-SA 4.0