第一章太简单就不加注释了
学习learnopengl文章对应地址:https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/
Visual Studio c++ 文件和 qt 项目链接(在一个包内):https://download.csdn.net/download/zzjzmdx/16592924
展示图:
Visual Studio 2019
代码如下:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
qt 5.15.1
代码如下:
main.cpp
#ifndef HELLOTRIANGLE_H
#define HELLOTRIANGLE_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class HelloTriangle : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
HelloTriangle(QWidget *parent = nullptr);
~HelloTriangle();
protected:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
private:
};
#endif // HELLOTRIANGLE_H
HelloTriangle.h
#include "HelloTriangle.h"
HelloTriangle::HelloTriangle(QWidget *parent)
: QOpenGLWidget(parent)
{
}
HelloTriangle::~HelloTriangle()
{
}
void HelloTriangle::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
}
void HelloTriangle::resizeGL(int w, int h)
{
}
void HelloTriangle::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
}
HelloTriangle.cpp
#include "HelloTriangle.h"
HelloTriangle::HelloTriangle(QWidget *parent)
: QOpenGLWidget(parent)
{
}
HelloTriangle::~HelloTriangle()
{
}
void HelloTriangle::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
}
void HelloTriangle::resizeGL(int w, int h)
{
}
void HelloTriangle::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
}