首页 > 其他分享 >OpenGL入门——浅谈OpenGL

OpenGL入门——浅谈OpenGL

时间:2023-07-16 20:44:49浏览次数:30  
标签:入门 渲染 OpenGL openGL 模式 显卡 浅谈

OpenGL入门了很多次,但是一旦踏出一段时间,就又啥也不懂,从头开始。
以前只是需要用的时候草草学一下怎么用,会套用就行,没让自己停下来认真思考消化......

短时间看效率高,长时间看效率低,因为每次使用都得重新搜索学习。

所以想在再次入门的时候记录点东西,整理一下自己的思绪,以后有时间再再再无限次回顾复盘!

 

OpenGL(Open Graphics Library)一般被看作是用于渲染2D、3D矢量图形的API(Application Programming Interface, 应用程序编程接口),但其实它不是一个API,它只是一个被严格规定了每个函数该如何运行,以及它们的输出值的规范。至于内部的具体实现方法是由编写openGL库的人决定的,只要功能和输出值是与规范一致的即可。

实际openGL库的开发者通常是显卡的生产商,我们使用的显卡所支持的openGL版本,就是专门为这个系列显卡开发的。所以OpenGL允许使用不同的方式实现,只要其表现行为(功能和输出值)与规范规定的一致。

当产生与规范不一致的bug时,只要更新显卡驱动可能就解决了,可见时常更新显卡驱动是有必要的。

 

最早接触opengl的时候还是立即渲染模式(Immediate mode,固定渲染管线),这个模式简单易用,因为它把大多数功能用库隐藏起来了,但也正因如此,使得它灵活性差,降低了效率。开发人员还是更希望能够自己掌握绘制渲染的细节,所以也就出现了核心模式(Core-profile)。核心模式完全移除了旧特性,当我们在这个模式下使用已废弃的函数(如:固定功能渲染的glBegin、glEnd、glVertex...)时就会报错并终止绘制,这迫使我们使用现代函数。虽然现代函数比较难学,但它灵活性更高、效率更高!所以还是值得去努力学习的,更重要的是它更有益于深入理解图形编程。

 

在大势所趋的情况下,我打算再次重新认真地学一下如何在核心模式下使用现代函数进行OpenGL编程。

标签:入门,渲染,OpenGL,openGL,模式,显卡,浅谈
From: https://www.cnblogs.com/ping-code/p/17558497.html

相关文章

  • 深度强化学习入门-李宏毅
    强化学习入门方法分类Policy-based(Acotr)深度强化学习怎么做的(和普通监督学习类似):1、Neuralnetworkasactor(定义模型)2、goodnessoffunction(定义目标函数)3、pickthebestfunction(选出最优模型/训练模型)定义模型$\theta$是神经网络参数$\pi_{\theta}(s)$......
  • 全网最详细4W字Flink入门笔记(下)
    本文已收录至Github,推荐阅读......
  • 全网最详细4W字Flink入门笔记(上)
    本文已收录至Github,推荐阅读......
  • UVM入门进阶4
    UVM结构回顾UVM结构UVM_TOPUVM中真正的树根是uvm_top。uvm_top是一个全局变量,是uvm_root的唯一一个实例(设计模式中的singleton,单态模式),uvm_root派生于uvm_component,因此uvm_top本质是一个uvm_component。uvm_test_top的parent是uvm_top,而uvm_top的parent是null。uvm_root在......
  • UVM入门进阶2
    UVM入门和进阶2核心基类(uvm_object)在UVM世界的类库地图中除过事务接口类继承于uvm_port_base,其他所有的类都是从uvm_object类一步步继承来的域的自动化:UVM通过域的自动化,使得用户在注册UVM类的同时也可以声明今后会参与到对象复制、克隆、打印等操作的成员变量,可以以简化对象的......
  • UVM入门进阶3
    UVM组件UVM组件家族是从uvm_component类继承的来的类UVM_DRIVER1.uvm_driver类会从uvm_sequencer中获取事务,经过转化然后再接口中对DUT进行时序激励2.uvm_driver类是参数化类,在定义时需要声明参数的类型classuvm_driver#(typeREQ=uvm_sequence_item,typeRSP=REQ)extends......
  • 字符串算法入门笔记
    zhx:什么AC自动机,KMP算法从来不会考zhx:不推荐用string,因为麻烦读ans入一个字符串chars[MAXN];cin>>s+1;//从s[1]开始读入,操作时方便在遍历字符串时,我们要先把字符串长度存下来,因为计算字符串长度的函数strlen的时间复杂度为\(O(长度)\),如果写成for(inti=1;i<=strlen(s+......
  • OI数学入门
    模运算//加法x=(a+b)%p;x=(0ll+a+b+c)%p;x=((a+b)%p+c)%p;//减法x=((a-b)%p+p)%p;//乘法x=1ll*a*b%p;x=1ll*a*b%p*c%p;高精度:正数的高精度读入,输出,储存,和\(+,-,\times\)运算。代码:#include<bits/stdc++.h>usingnamespacestd;constintMAXN=1e5+10;struct......
  • UVM入门进阶1、2
    UVM入门进阶1创建对象的四种方法classtransextendsuvm_object...endclassclasstopextendsuvm_test//uvm_test继承于uvm_component...endclassclassobject_createextendstop;transt1,t2,t3,t4;`uvm_component_utils(object_create)func......
  • 【转】Docker入门笔记04:三大核心概念
    原文:https://zhuanlan.zhihu.com/p/312142777Docker的三大核心概念镜像Image容器Container仓库RepositoryDocker大部分的操作都围绕它的三大核心概念一、Docker镜像Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的用于创建容器的模板。例如,一个镜像可以包含一个基......