OpenGL 基础用法

OpenGL 基础用法

OpenGL(Open Graphics Library)是一种用于渲染2D和3D图形的跨平台API。它被广泛应用于游戏开发、科学可视化和图形设计等领域。

准备工作

在开始之前,你需要安装OpenGL和GLFW库。
参考vscode 通过GLFW,GLEW 配置使用 OpenGL 的方法

GLFW是一个用于创建窗口、上下文和处理输入的开源库,非常适合与OpenGL配合使用。

#include <GLFW/glfw3.h>
#include <math.h>
#include <iostream>

我们引入了必要的头文件,其中GLFW/glfw3.h用于与窗口相关的操作,math.h用于数学计算,iostream则用于输出调试信息。

设置常量与初始化

接下来,我们定义了一些常量,包括圆形的边数、半径以及π的近似值。这些常量将用于控制绘制的圆形的精度和大小。

const int n = 100;                 // 圆形的边数,越大越接近圆形
const GLfloat R = 0.5f;            // 圆形的半径
const GLfloat Pi = 3.1415926536f;  // π 的近似值
3. 绘制函数

为了绘制圆形,我们定义了drawCircle函数。该函数使用glBegin(GL_TRIANGLE_FAN)绘制三角扇,这是一种高效绘制圆形的方法。

void drawCircle(GLfloat x, GLfloat y, GLfloat radius, int segments)
{
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(x, y);  // 圆心

    for (int i = 0; i <= segments; ++i)
    {
        float angle = 2 * Pi * i / segments;
        float dx = cos(angle) * radius;
        float dy = sin(angle) * radius;
        glVertex2f(x + dx, y + dy);
    }

    glEnd();
}
创建窗口与上下文

main函数中,我们首先初始化GLFW,并创建一个800x600的窗口。如果窗口创建失败,将输出错误信息并退出程序。

if (!glfwInit())
{
    std::cout << "GLFW初始化失败" << std::endl;
    return -1;
}

GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL 圆形绘制", NULL, NULL);
if (!window)
{
    std::cout << "GLFW窗口创建失败" << std::endl;
    glfwTerminate();
    return -1;
}

glfwMakeContextCurrent(window);
主循环与绘制

进入主循环后,我们清除屏幕,设置颜色,然后调用drawCircle函数绘制红色的圆形。最后,我们交换缓冲区以显示绘制结果,并处理输入事件。

while (!glfwWindowShouldClose(window))
{
    // 清除屏幕
    glClear(GL_COLOR_BUFFER_BIT);

    // 设置颜色为红色
    glColor3f(1.0f, 0.0f, 0.0f);

    // 绘制圆形
    drawCircle(0.0f, 0.0f, R, n);

    // 交换缓冲区并检查事件
    glfwSwapBuffers(window);
    glfwPollEvents();
}
终止程序

当用户关闭窗口时,主循环结束,我们需要调用glfwTerminate来清理并关闭GLFW。

glfwTerminate();
7. 总结

通过这个简单的示例,你可以了解到OpenGL的基本使用流程。关键步骤包括初始化GLFW、设置绘制函数、创建窗口和上下文、进入主循环进行绘制,并最终终止程序。随着你对OpenGL的进一步学习,可以尝试绘制更加复杂的图形和实现更加高级的效果。

示例代码

#include <GLFW/glfw3.h>
#include <math.h>
#include <iostream>

using namespace std;

const int n = 100;                 // 圆形的边数,越大越接近圆形
const GLfloat R = 0.5f;            // 圆形的半径
const GLfloat Pi = 3.1415926536f;  // π 的近似值

void drawCircle(GLfloat x, GLfloat y, GLfloat radius, int segments)
{
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(x, y);  // 圆心

    for (int i = 0; i <= segments; ++i)
    {
        float angle = 2 * Pi * i / segments;
        float dx = cos(angle) * radius;
        float dy = sin(angle) * radius;
        glVertex2f(x + dx, y + dy);
    }

    glEnd();
}

int main(void)
{
    // 初始化 GLFW
    if (!glfwInit())
    {
        cout << "GLFW初始化失败" << endl;
        return -1;
    }

    // 创建窗口
    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL 圆形绘制", NULL, NULL);
    if (!window)
    {
        cout << "GLFW窗口创建失败" << endl;
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    // 主循环
    while (!glfwWindowShouldClose(window))
    {
        // 清除屏幕
        glClear(GL_COLOR_BUFFER_BIT);

        // 设置颜色为红色
        glColor3f(1.0f, 0.0f, 0.0f);

        // 绘制圆形
        drawCircle(0.0f, 0.0f, R, n);

        // 交换缓冲区并检查事件
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // 终止 GLFW
    glfwTerminate();
    return 0;
}

2024/8/9

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值