OpenGL 个人初学杂记 入门

下面是个人学习的总结:

知识点:

1,Opengl   它是包含了一系列的 图形 、 图像的函数   并不是一个api    紧紧是由 khronos 组织 制定并维护 规范

2,规范 主要是  制定:  函数是如何执行   以及 函数的输出值     

题外话: 至于内部每个函数的的具体实现   由opengl 库的开发者决定,OpenGL 的开发者 一般都是 显卡的生产商提供   也有一些爱好者改编的版本  

3, 

1) OpenGL 3.2  之前 都是 立即渲染模式 (固定渲染管线) 

2) OpenGL  3.3 之后 包括 3.3  使用的是  核心渲染模式    后期一直都是再3.3 基础之上进行扩展

立即渲染模式  与 核心渲染模式  优缺点

1, 3.2 之前  容易理解  使用简单   但是大多数功能都被隐藏了,很少能控制OpenGL的计算自由,灵活性差 效率低

2,3.3之后 使用了现代函数,灵活性高了  效率高了 但是学习更难了,需要去理解 OpenGL和图形编程,可以让人更深入的理解图形编程,后续更高版本 都是在 3.3 基础上进行扩展的      3.3 的规范完全移除了旧的特效

4,扩展  如果出来了 新的特性或 渲染上的大优化。 可以不必等待新的 OpenGL规范面试,我们就可以直接使用新的渲染特性  

if(GL_ARB_extension_name)

{

    // 使用硬件支持的全新的现代特性

}

else

{

    // 不支持此扩展: 用旧的方式去做

}

 

5,状态机: OpenGL 是一个 巨大的状态机, 可以通过一系列变量来描述 OpenGL 此刻应该如何运行

       OpenGL 的状态  被称为 OpenGL 的上下文 context    通过改变 context 的变量 来修改渲染

6,OpenGL 的内核  是一个 C库 

由于C库的一些特性 很难被翻译到其他的高级语言 所以 引入了一些抽象层   比如  对象Object 

对象包含了一些 选项的集合,它是一个 OpenGL 状态的子集  可以给这个对象设置  大小 颜色等等

struct object_name {

    float  option1;

    int    option2;

    char[] name;

};

一个对象例子

// OpenGL的状态

struct OpenGL_Context {

    ...

    object* object_Window_Target;

    ...     

};
// 创建对象

unsigned int objectId = 0;

//创建一个对象

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

当我们需要操作绘制的时候,只需要设置 对象变量即可

当我们需要绘制某个对象的时候,只需要绑定 一个包含 对应模型数据的对象就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值