问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

OpenGL简介

发布网友 发布时间:2022-09-09 02:05

我来回答

1个回答

热心网友 时间:2024-12-12 16:07

上一节已经搭建好了开发环境,在正式学习如何用OpenGL前,我们先了解一下OpenGL的基础知识。

一、OpenGL是什么

一般它被认为是一个API,包含了一系列的函数,用来操作各种图形图像。事实上并不是,OpenGL仅仅是一个由一个名为Khronos组织制定并维护的规范。但是,我宁愿把它当成是API来理解,因为规范严格规定了OpenGL各函数的输入和输出,内部细节都是开发者自行决定。那么以API来理解,我认为是很合理的。(其实OpenGL函数大多是各显卡厂商开发的,所以如果你在用OpenGL开发过程中如果遇到问题,可以尝试更新显卡驱动的方式来解决,当然,前提是你还要确定一下显卡厂商)

如果你想了解OpenGL规范细节,可以访问https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdf。

二、状态机

OpenGL是一个状态机,无论是官方信息还是网络上的信息,都解释的比较繁琐和复杂。

我认为,可以这么理解,当我们用OpenGL去绘制一个三角形时,要把OpenGL当前状态设置成可以绘制三角形的状态,比如颜色、线条啥的,渲染就出来三角形了。如果又想绘制线段了,就把OpenGL当前状态再设置成线段的状态,就可以渲染出线段了。

说白了,就是想绘制啥,就把状态设置先设置成啥,这就是状态机。(这是我自己理解的,哈哈)

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

OpenGL3.2之前,它都是立即渲染模式,3.2之后,它使用了核心模式,抛弃了立即渲染模式。

那么什么是立即渲染模式,什么是核心模式呢?

我查了网上很多资料,都没有把这个事情说清楚,我通过各种文章,是这么理解的:

立即渲染模式是类似这样:

glBegin( GL_TRIANGLES );

    glVertex3f(-1.0f, -0.5f, -4.0f);

    glVertex3f( 1.0f, -0.5f, -4.0f);

    glVertex3f( 0.0f, 0.5f, -4.0f);

glEnd();

上面是绘制三角形的,具体可以不用追究。只要明白,设置好点,放在glBegin和glEnd之间,就能渲染出来三角形了。这就是立即渲染模式。

而核心模式就要关注细节了,它是如何用点和颜色渲染图形的,都需要开发者参与设计。

暂时我就理解到这个程度,后续边学边理解吧。

四、对象

OpenGL库是用C语言写的,我们知道C语言是面向过程的,之前的OpenGL也是面向过程的,比如,绘制一个图形,就要设置好顶点和颜色,如果再绘制一个,就要再设置一次。而OpenGL引入“对象(Object)”后,就方便多了。比如:

// 创建对象

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

上面这段是在网上抄过来的,不过,说明很详细,我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。然后我们将对象绑定至上下文(就是设置内容,比如颜色、大小等等)的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

说白了,就是,创建一个对象,先用一个ID保存起来,并设置好内容,想用了,将这个ID跟设置目标(比如GL_WINDOW_TARGET)绑定,就可以用了,不用每次都重新设置。

好了,这次了解了一些OpenGL的基础,下一次就可以开心正式学习OpenGL了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
邪灯是什么意思? 趣头条怎么解绑微信 趣头条APP解绑微信教程 趣头条怎么解绑微信号 趣头条怎样解除微信绑定 魔兽世界7.0古龙之陨怎么做 咸阳男子欲带孩子轻生被救回,成年人的生活有多不易? 陕西咸阳,一男子欲带孩子轻生被救回,轻生带孩子是什么操作? 我是帅哥,为什么还没有人追? 为什么我这么漂亮就是没有一个男人来追我 气死了? 人不在本地,怎么实名制 问:15万左右预算买什么二手车比较好 头虱卵有黑色的吗? 09年新君威远光灯关不了了,什么情况 学习计算机软件开发的前景如何啊?有没有想一起学的啊,本人23了... 被虫子咬了包痛痒硬是虫卵在里面吗 被虫子咬怎么办? 王者荣耀马可波罗使用技巧特别走位的技巧,还有怎么打 王者荣耀马可波罗连招技巧 马可波罗技能怎么连招 河北省选调生职位表和省考一样吗 《王者荣耀》里“马可波罗”的连招技巧是什么? 奥利给是什么意思英文 心的成语有多少 经停是什么意思 飞机为什么会经停? 心有哪些成语 打英雄联盟需要几兆的宽带? 幼儿园孩子对父母说的感恩话 幼儿园孩子感恩父母的话推荐 弘电脑玩lol要多少网速? 带心的成语有哪些 玩英雄联盟要多大宽带,网速要多少啊。 OpenGL入门-4 有关OpenGL的 opengl基本语句理解 人得身体需要哪些营养 含有“春”的诗句有哪些? 配合怎么理解 【第30篇-莫清】腹直肌分离如何修复 辟谣:腹直肌分离是腹直肌的问题?不,其实问题出在腹横肌 游山西村这首古诗第一句到第四句诗句解释 每天人最需要的营养是什么 qq的校园扩列怎么设置? 怎样点亮游戏人生图标 怎样点亮游戏人生图标? 鸡泡鱼干煲汤的做法 三星手机怎样下载Google 女生发:爱是一路仁至义尽是什么意思? 爱是一路仁至义尽什么意思 爱是一路仁至义尽的解释 各位朋友这是啥意思 爱是一路仁至义尽. 爱是一路仁至义尽 什么意思? 分手的女朋友给我留言说:爱是一路仁至义尽