Horse3D引擎研发笔记(一):从使用Qt的OpenGL库绘制三角形开始

引言

在现代计算机图形学中,OpenGL作为跨平台的图形库,被广泛应用于游戏开发、科学可视化、虚拟现实等领域。Qt作为功能强大的跨平台C++应用开发框架,提供了对OpenGL的良好支持。本文将记录Horse3D引擎开发的起点------使用Qt的OpenGL库绘制一个简单的三角形,并逐步介绍引擎的开发思路和规划。


一、使用Qt的OpenGL库绘制三角形的过程

1. 环境搭建

在开始开发之前,需要确保开发环境已经正确配置:

  • 安装Qt:从Qt官方网站下载并安装Qt Creator。
  • 安装CMake:后续项目管理将使用CMake,需提前安装。
  • 安装必要的开发工具链:如GCC编译器、Make工具等。

2. 创建Qt OpenGL项目

在Qt Creator中创建一个新的Qt OpenGL项目。选择"Qt Widgets Application"模板,并确保勾选"OpenGL"选项。

3. 代码实现

(1) 初始化OpenGL上下文

FerghanaScreen类的构造函数中,继承自QOpenGLWidget,并重写initializeGLresizeGLpaintGL三个虚函数。

cpp 复制代码
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <GL/gl.h>

class FerghanaScreen : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    FerghanaScreen(QWidget* parent = nullptr);
    ~FerghanaScreen();

protected:
    void initializeGL() override;
    void resizeGL(int w, int h) override;
    void paintGL() override;
};

(2) 初始化OpenGL功能

initializeGL函数中,初始化OpenGL功能并配置渲染环境。

cpp 复制代码
void FerghanaScreen::initializeGL()
{
    initializeOpenGLFunctions(); // 初始化OpenGL函数指针
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置背景颜色

    // 顶点数据
    static const GLfloat vertices[] = {
        -0.5f, -0.5f, 0.0f,  // 左下角顶点
         0.5f, -0.5f, 0.0f,  // 右下角顶点
         0.0f,  0.5f, 0.0f   // 顶部顶点
    };

    // 创建并绑定顶点数组对象(VAO)
    glGenVertexArrays(1, &VAO);
    glBindVertexArray(VAO);

    // 创建并绑定顶点缓冲对象(VBO)
    glGenBuffers(1, &VBO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    // 设置顶点属性指针
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);
    glEnableVertexAttribArray(0);

    // 解绑VAO和VBO
    glBindVertexArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

(3) 绘制三角形

paintGL函数中,清除屏幕并绘制三角形。

cpp 复制代码
void FerghanaScreen::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区

    // 绑定VAO
    glBindVertexArray(VAO);
    // 绘制三角形
    glDrawArrays(GL_TRIANGLES, 0, 3);
    // 解绑VAO
    glBindVertexArray(0);
}

(4) 窗口调整

resizeGL函数中,处理窗口调整事件。

cpp 复制代码
void FerghanaScreen::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h); // 设置视口大小
}

4. 测试运行

编译并运行程序,应该会看到一个简单的红色三角形。如果出现问题,可以检查以下几点:

  • 确保OpenGL驱动已正确安装。
  • 检查顶点数据是否正确。
  • 确保VAO和VBO的创建和绑定没有问题。

二、Horse3D引擎介绍

1. 项目地址

Horse3D引擎

2. 项目介绍

Horse3D引擎是一款基于Qt和OpenGL开发的三维渲染引擎,旨在提供一个高效、灵活的渲染解决方案。引擎的核心设计参考了Three.js和Unity等知名引擎的API,同时结合C++的性能优势,致力于打造一个具有竞争力的渲染引擎内核。

  • 特点

    • 基于Qt和OpenGL,跨平台支持。
    • 提供SDK形式的接口,方便二次开发。
    • 高效的渲染性能和灵活的API设计。
  • 目标

    • 提供完整的三维图形渲染功能。
    • 支持物理引擎、动画系统和粒子系统等扩展模块。
    • 打造一个易于使用且功能强大的三维引擎。

三、使用CMake管理项目

1. CMake简介

CMake是一个跨平台的构建工具生成器,能够简化项目的编译和构建过程。通过CMake,开发者可以轻松地为不同平台生成相应的构建文件(如Makefile、Visual Studio项目文件等)。

2. CMakeLists.txt配置

在项目根目录下创建CMakeLists.txt文件,配置项目的基本信息和依赖项。

cmake 复制代码
cmake_minimum_required(VERSION 3.10)
project(Horse3D)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)

# 添加Qt模块
find_package(Qt5 REQUIRED COMPONENTS Widgets OpenGL)

# 添加可执行文件
add_executable(Horse3D main.cpp FerghanaScreen.cpp)

# 链接Qt库
target_link_libraries(Horse3D Qt5::Widgets Qt5::OpenGL)

3. 生成构建文件

在终端中运行以下命令,生成构建文件并编译项目:

bash 复制代码
mkdir build
cd build
cmake ..
make

四、总结与展望

通过本文的记录,我们完成了Horse3D引擎的第一个里程碑------使用Qt的OpenGL库绘制一个简单的三角形。这不仅是引擎开发的第一步,也为后续的三维图形渲染奠定了基础。

接下来,我们将逐步扩展引擎的功能,包括:

  • 添加更多的三维图形元素(如立方体、球体等)。
  • 实现基本的光照和材质系统。
  • 集成物理引擎和动画系统。
相关推荐
钱彬 (Qian Bin)13 分钟前
AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
qt·自定义·图像·qml·qt quick·裁剪工具
SmalBox1 小时前
【渲染流水线】[应用阶段]-[渲染命令队列]以UnityURP为例
unity·渲染
稚肩1 小时前
如何在linux中使用Makefile构建一个C++工程?
linux·运维·c++
啊森要自信1 小时前
【QT】常⽤控件详解(七)容器类控件 GroupBox && TabWidget && 布局管理器 && Spacer
linux·开发语言·c++·qt·adb
源代码•宸2 小时前
C++高频知识点(二十)
开发语言·c++·经验分享·epoll·拆包封包·名称修饰
重启的码农2 小时前
ZeroTier 源码解析 (2) 节点 (Node)
c++·网络协议
重启的码农2 小时前
ZeroTier源码解析 (3) 身份 (Identity)
c++·网络协议
遇见你的雩风2 小时前
C++结构体的赋形之记
c++
草莓熊Lotso3 小时前
《解锁 C++ 起源与核心:命名空间用法 + 版本演进全知道》
c++·经验分享·笔记·其他