OpenGL学习笔记(一)简介&初探

OpenGL学习笔记(一)简介&初探

1. OpenGL

OpenGL 简介

  • OpenGL(Open Graphics Library,开放式图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序接口(API),包含了一系列可以操作图形、图像的函数。[1][2]
  • OpenGL官网的描述其为”The Industry’s Foundation for High Performance[3],OpenGL本身并不是一个API,仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数如何运行,以及其输出输出值,而函数的具体实现,则由OpenGL库的开发者自行决定。[2]
  • 实际上,通常是显卡的生产商开发具体的OpenGL库,如使用Apple系统时,OpenGL库是由Apple自身维护。当OpenGL产生bug时,可以通过升级显卡驱动解决。[2]

OpenGL 相关库

  • OpenGL core Library
    • OpenGL核心库
  • OpenGL Utility Library(GLU)
  • OpenGL Utility Toolkit(GLUT)
    • 提供窗口系统的功能命令
  • freeglut
    • 更新OpenGL的库
  • OpenGL Extension Wrangler Library(GLEW)

发展历史

  • 1980s,软件开发人员为每种图形硬件编写自定义的借口和驱动程序。
  • 1990初,SGI成为工作站3D图形领域的领导者,其IRIS GL API成为事实上的行业标准。其竞争对手(Sun、惠普、IBM)通过扩展PHIGS标准也将3D硬件投入市场,SCI 将 IRIS GL API转变为一项开放标准,即OpenGL。
  • 1992年,SCI领导OpenGL架构审查委员会(OpenGL ARB)的创建。
  • 1995年,微软发布Direct3D成为OpenGL的主要竞争对手。
  • 1997年12月17日,微软和SGI发起华氏温标项目,统一OpenGL和Direct3D接口。1998年,惠普加入,但项目于1999年停止。
  • 2006年7月,OpenGL架构评审委员会将OpenGL API标准的控制权交给Khronos Group。

相关概念

  • 此部分主要参考[2]

核心模式 与 立即渲染模式

  • 立即渲染模式(Immediate mode, 固定渲染管线):早期OpenGL使用,绘制图形容易使用和理解,但是效率较低。
  • 核心模式(Core-profile):从OpenGL3.2后开始使用,移除了旧的特性,迫使用户使用现代的函数。

扩展

  • 扩展(Extension):支持扩展,未成为规范之前,显卡公司提出的新特性或优化可以通过扩展的方式在驱动中实现。

状态机

  • OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述此时的OpenGL如何运行。OpenGL的状态通常被称为OpenGL上下文。
  • 使用OpenGL时,使用状态设置函数(State-changing Function)与 状态使用函数(State-using Function)来进行操作。

2. 初次尝试

  • 以下内容针对Mac上的Xcode(版本 Xcode11),其他平台的搭建还请参考网上的其他资源(MAC XCODE已自带GLUT.framework和OpenGL.framework,所以初次尝试不涉及“复杂”的环境配置)。以下内容参考[4]
  1. 打开Xcode,新建一个Command Line Tool项目。

    01-01 新建Command Line Tool项目

  2. 添加GLUT.framework和OpenGL.framework

    1. 点击Build Phases, Link Binary with Libraries

      01-02 添加库位置

    2. 寻找、添加GLUT.framework和OpenGL.framework

      01-03 添加framework

    3. 完成后效果

      01-04 添加后效果

  3. 进入main.cpp编写Demo代码并运行

    1. Demo代码

      //绘制一个正方形
      #include <GLUT/GLUT.h>
      void myDisplay(void) {
          glClear(GL_COLOR_BUFFER_BIT);
          glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
          glFlush();
      }
      
      int main(int argc, char *argv[]) {
          glutInit(&argc, argv);
          glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
          glutInitWindowPosition(100, 100);
          glutInitWindowSize(400, 400);
          glutCreateWindow("第一个 OpenGL 程序");
          glutDisplayFunc(&myDisplay);
          glutMainLoop();
          return 0;
      }
    2. 运行效果

      01-05
    3. 由于在macOS 10.9、10.14 后一些命令被废止,会出现以下提示信息,下一篇会使用GLEW库。

      01-06 XCODE中的提示

参考文献

[1]: https://baike.baidu.com/item/OpenGL/238984?fr=aladdin “OpenGL-百度百科”
[2]: https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/ “LearnOpenGL CN-入门”
[3]: https://www.opengl.org “OpenGL 官网”
[4]: https://www.cnblogs.com/chenyangsocool/p/5357691.html “Max Xcode 下配置OpenGL - chenyangsocool - 博客园”


  Reprint please specify: Yi勒 OpenGL学习笔记(一)简介&初探

 Previous
iPad软件个人推荐 iPad软件个人推荐
iPad软件个人推荐前言 用iPad来做学习工具已经一个学习多了,鉴于身边有意向购买、使用iPad的人似乎日渐增多,写下此篇小文章来介绍一下我日常使用的几款不错的软件。另外,本人的设备包含iPad(第六代)和Pencil(一代,二代不支持i
2019-10-02
Next 
2019论文阅读笔记<03> 2019论文阅读笔记<03>
2019 论文阅读笔记 <03>【基本信息】 论文题目:Attention is all you need 作者:Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkorei
2019-09-27
  TOC