1.1 OpenGL

一、OpenGL是什么?

  • OpenGL本身并不是一个API(Application Programming Interface,应用程序编程接口),仅仅是一个由Khronos组织制定并维护的规范;

  • OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值,至于函数内部是如何实现的,将由OpenGL库的开发者(通常为显卡生产商)自行决定;

  • 由于OpenGL的大多数实现是由显卡厂商编写的,当产生一个bug时通常可以通过升级显卡驱动来解决。

二、核心模式与立即渲染模式

1、立即渲染模式(Immediate mode,也叫固定渲染管道)

  • 早期OpenGL使用的模式;

  • OpenGL的大多数功能都被隐藏起来,容易理解和使用,但是效率太低;

  • 从OpenGL3.2开始,推出核心模式

2、核心模式(Core-profile)

  • 也叫可编程管线

  • 提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程

三、状态机(State Machine)

  • OpenGL自身是一个巨大的状态机,描述该如何操作的所有变量的大集合;

  • OpenGL的状态通常被称为上下文(Context);

  • 状态设置函数(State-changing Function):将会改变上下文;

  • 状态使用函数(State-using Function):根据当前OpenGL的状态执行一些操作;

  • 通过改变一些上下文变量来改变OpenGL的状态,从而告诉OpenGL如何去绘图。

四、对象(Object)

一个对象是指一些选项的集合,代表OpenGL状态的一个子集;

例如:我们可以用一个对象来代表绘制窗口的设置:设置它的大小、支持的颜色位数等等,可以把对象看做一个C风格的结构体;

struct object_name {
    GLfloat option1;
    GLfloat option2;
    GLchar[] name;
};

通常把OpenGL上下文比作一个大的结构体,包含很多子集:

//OpenGL的状态
struct OpenGL_Context {
    ...
   object_name* object_name_target;
    ...
};
//创建对象 
unsigned int objectId = 0; 

//给对象objectId赋一个id
glGenObject(1, &objectId); 

//绑定对象至上下文 
glBindObject(GL_WINDOW_TARGET, objectId); 

//设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项 
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800); 
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600); 

//将上下文对象设回默认(解绑)
glBindObject(GL_WINDOW_TARGET, 0);

//设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效

使用对象的一个好处:在程序中,不止可以定义一个对象,并设置它们的选项,每个对象都可以是不同的设置,在执行一个使用OpenGL状态的操作的时候,只需要绑定含有需要设置的对象即可。

注:观看OpenGL中文官网(https://learnopengl-cn.github.io/)和阿西拜的现代OpenGL入门(https://ke.qq.com/course/3999604#term_id=104150693)学习OpenGL

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值