如何使用openGL画圆

OpenGL 基础用法

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

准备工作

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

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

#include 
#include 
#include 

我们引入了必要的头文件,其中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 
#include 
#include 

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;
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇