创建工程
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)
绘制一个三角形