LearnOpenGL从入门到入魔(1):OpenGL简介

本文是LearnOpenGL系列的第一篇,介绍了OpenGL的基本概念,如立即渲染模式与核心模式,状态机与对象。并详细阐述了在Windows10上搭建OpenGL环境的过程,包括构建GLFW库、获取GLAD函数加载器,以及配置OpenGL开发环境和创建窗口的步骤。通过本文,读者将能够初步了解OpenGL并完成基本的窗口创建。
摘要由CSDN通过智能技术生成

总目录

LearnOpenGL从入门到入魔(1):OpenGL简介
LearnOpenGL从入门到入魔(2):绘制2D图形
LearnOpenGL从入门到入魔(3):绘制纹理
LearnOpenGL从入门到入魔(4):绘制3D图形
LearnOpenGL从入门到入魔(5):简单滤镜效果
LearnOpenGL从入门到入魔(6):光照(光照基础,材质)
LearnOpenGL从入门到入魔(7):光照(光照贴图,投光物)

1. OpenGL简介

 OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者(显卡生产商)。广义来说,OpenGL是一套开放图形库,它包含了一系列可以操作图形、图像的函数。

1.1 立即渲染模式与核心模式

  • 立即渲染模式

 早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少有控制OpenGL如何进行计算的自由,立即渲染模式确实容易使用和理解,但是效率太低。

  • 核心模式

 从OpenGL3.2开始,规范文档开始废弃立即渲染模式,当使用OpenGL的核心模式时,OpenGL迫使我们使用现代的函数。当我们试图使用一个已废弃的函数时,OpenGL会抛出一个错误并终止绘图。现代函数的优势是更高的灵活性和效率,然而也更难于学习。现代函数要求使用者真正理解OpenGL和图形编程,它有一些难度,然而提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程。

1.2 状态机与对象

  • 状态机

 OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

  • 对象

 OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。比如,我们可以用一个对象来代表绘图窗口的设置,之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体(Struct):

struct object_name {
   
    float  option1;
    int    option2;
    char[] name;
};

当我们使用一个对象时,通常看起来像如下一样(把OpenGL上下文看作一个大的结构体):

// OpenGL的状态
struct OpenGL_Context {
   
    ...
    object* object_Window_Target;
    ...     
};

使用OpenGL时常见的工作流:

// 创建对象
// objectId为对象的引用
unsigned int objectId = 0;
glGenObject(1, &objectId);
// 绑定对象至上下文(目标位置GL_WINDOW_TARGET)
glBindObject(GL_WINDOW_TARGET, objectId);
// 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项
// 设置的选项将被保存在objectId所引用的对象中
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// 将上下文对象设回默认
glBindObject(GL_WINDOW_TARGET, 0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值