openGl 入门(一)_opengl入门-程序员宅基地

技术标签: ui  android  openGl  

openGL 介绍

1 OpenGl 是什么,其标准是谁制定,谁实现?

答:OpenGl 它是一个3D 图形库,khronos 定义 OpenGL 函数API,规定了每个API输入输出,各个显卡厂商负责实现这些API,因此openGl 其API 界面都是一样的,但具体函数的实现都不一样。

2 立即渲染模式和核心模式区别?

答:在3.2之前都是立即渲染模式,抽象掉很多细节,操作简单;在3.2 及之后,规范文档开始废弃立即渲染模式,鼓励开发者使用核心模式,它可以操作更多细节,效率更高,但使用起来要复杂很多。

3 openGl 状态机是什么,如何改变状态,其流程完是啥?

答:引用一些变量和函数,指示当前OpenGl 所处的状态,在当前状态可做什么,不可做什么,复杂一点的软件库一般都会引用状态机。

设置选项,操作缓冲,使用上下文来渲染。//都通过哪些函数?

1) 创建openGL对象,用id 值保存它的引用; //glGenObject(1, &objectId);

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

3) 设置选项,如宽高等等。glSetObjectOption(GL_WINDOW_TARGET, );

4) 将上下文对象设回默认值。glBindObject(GL_WINDOW_TARGET, 0);

4 openGL 用什么语言写的,是否支持多种语言派生?

答: openGL 内核是C语言实现, 为了兼容其他语言,引用了抽象层。//具体如何实现?

5 什么是GLFW?

:它是一个针对openGl的c语言库,提供窗口显示功能,openGl 渲染好的buffer可通过GLFW来显示。

6 什么是GLAD?

答:显卡厂商提供都是lib形式,每个厂商都不一样,GLAD它使用一个在线服务,将定义版本对应所有opengl得函数下载下来。

7 什么是图形渲染管线,它有经历哪些流程?

答:一大堆原始数据途径一个管道期间经过各种变化处理最终显示到屏幕上。

它经历如下七个流程,其蓝色部分是我们可自定义着色器部分。

0ea2d38436cf4e34b076b7a32d5ebe2e.jpg

 1)顶点数据:用三个3D坐标输入表示一个三角形,一系列这样的点叫做顶点数据。

2 )顶点着色器:接收顶点数据,确定绘制图形的形状。根据需要对顶点数据做变换处理,然后传给下一个阶段。

3)图元装配:将所有顶点装配成图元形状。点,线,三角形等等。

4)几何着色器:把图元装配的形状生成新的图元。输入一个图元决定输出0个或多个,还可以做放大缩小变形等处理。

5)光栅化阶段:将图元映射成最终屏幕显示的像素,并进行裁剪。

6)片段着色器:计算像素最终显示的颜色,光照,阴性,高量效果都是在这里进行计算,用户自定义最频繁的地方。

7)Alpha测试和Blending:决定像素要不要显示,多层图形叠加。

8 VBO, EBO, VAO作用与区别?

答:VBO它存放了大量顶点数据,避免一个个传送顶点数据,一次性将数据从CPU传到GPU。

VAO顶点数据对象,VBO将数据从CPU传到GPU,然后在使用的时候通过VAO将这些数据一个个取出来。

EBO:也是将数据从CPU送到GPU,但存放的数据是顶点表和顶点所对应index,到时候用查表法进行渲染。

10 GLSL是什么,它和C语言有什么差异?

答:它是操作着色器的语言,版本声明开头,然后是输入输出变量,接着就是Uniform和main()函数,和C语言大体类似。

11 Uniform 是什么,相比于VAO/EBO有什么区别?

答:它是一个全局变量,可以被主程序和着色器识别,相比于VAO/EBO使用方便,但是如果大量的数据传递还得使用顶点属性。

12 openGl 数据传递都有哪些方式?

答:1)VBO,EBO,VAO; 2)定义成Uniform变量;3)着色器输出和下一个着色器输入变量名字定义成一样。

13 什么是纹理,有哪几种环绕和过滤方式?

答:纹理就是一张2D图片,比如一面红砖墙,一个个红砖就是纹理,用来图像对象细节的。

纹理坐标通常是(0,1),当超出这范围有四种环绕方式;

当图片与纹理大小不一样时,需要确定纹理得像素值,有邻近过滤和线性过滤两种方式。

14 什么是多级渐远纹理?

答:存在多个纹理,离的远得纹理占的像素小,离得近得占的多。

15 openGl 都有哪些变换,怎么实现?

答:缩放,平移,旋转;利用GLM库计算变换后矩阵,然后通过uniform将这变换矩阵传到着色器。

16 openGl 有几个坐标空间,为什么要这么多坐标空间,如何将其转换?

答:有五个坐标空间:局部空间,世界空间,观察空间,剪裁空间,屏幕空间。方便操作,如果对单个物体操作使用局部空间更好,一个物体相对于另一个物体世界空间更好。

空间转换:通过•乘。比如局部空间•模型矩阵得到世界空间。最后V.clip = M.projection•M.View •M.model •M.local;最后得到剪裁空间传到着色器。

17 openGl 相关都有哪些库,分别用来干什么?

答:1 GLFW 窗口显示,2 GLAD 加载库适配不同显卡厂商的库,3 GLM 矩阵数学计算,4 GLAD 纹理加载库。

18 look at矩阵作用?

答:look at矩阵乘任何向量来将其变化到对应的空间。达到从世界空间变化到观察空间的目的。

19 如何通过摄像机系统,让对象在3D环境中自由移动?

答:先计算camera 向量,然后通过lootAt矩阵将坐标空间从世界空间转化到观察空间,从而控制对象视角。

20 模板测试原理及作用?

答:通过模板缓冲区(里面是0,1数据),当对应位置为0时将片段丢弃,可以实现轮廓效果。

21 什么是混合及如何操作?

答:将2个片元的颜色进行调和产生一个新的颜色。glEnable(GL_BLEND); glBlendFunc();然后按照由选到近的方式绘制不同纹理。

22 什么是实例化绘制如何操作?

答:只调用一次就可以将同一物体按照不同的颜色位置形状绘制多次。

glDrawArraysInstanced();
glDrawElementsInstanced ();

23 如何立方体贴图?

答:立方体贴图本质还是一种纹理映射,但是它是3D纹理映射,需要映射6个单独的面。

在绑定纹理时使用glBindTexture(GL_TEXTURE_CUBE_MAP);然后调用glTexImage2D()函数6次。

24 openGL 如何实现相机预览?

答:法一,基于安卓原生代码 SurfaceTexture 实现,绑定相机,配置好变换矩阵即可实现相机预览。法二,通过ImageRender将预览图像数据取出,然后传入Native层。

25 利用OpenGl绘制三角形步骤?

答:1 初始化glfw 窗口显示函数;2 利用glad库加载openGl 所有函数指针;3 建立并编译顶点片段着色器;4 将顶点片段着色器建立连接;5设置三角形顶点数据,利用VAO或EBO将顶点数据传送至顶点着色器;5 调用openGl draw函数。

26glDrawArrays(),glDrawElelement(),glDrawBuffer(),glDrawPixels()区别。

答:glDrawArrays(int mode,int first,int count) //VAO

void glDrawElements( GLenum mode, GLsizei count,GLenum type, const GLvoid *indices);//渲染EBO

glDrawBuffer 定义选择哪个色彩缓冲区被绘制;glDrawPixels 将一组像素写入帧缓冲区;

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DMC111qwf/article/details/127343839

智能推荐

解决win10/win8/8.1 64位操作系统MT65xx preloader线刷驱动无法安装_mt65驱动-程序员宅基地

文章浏览阅读1.3w次。转载自 http://www.miui.com/thread-2003672-1-1.html 当手机在刷错包或者误修改删除系统文件后会出现无法开机或者是移动定制(联通合约机)版想刷标准版,这时就会用到线刷,首先就是安装线刷驱动。 在XP和win7上线刷是比较方便的,用那个驱动自动安装版,直接就可以安装好,完成线刷。不过现在也有好多机友换成了win8/8.1系统,再使用这个_mt65驱动

SonarQube简介及客户端集成_sonar的客户端区别-程序员宅基地

文章浏览阅读1k次。SonarQube是一个代码质量管理平台,可以扫描监测代码并给出质量评价及修改建议,通过插件机制支持25+中开发语言,可以很容易与gradle\maven\jenkins等工具进行集成,是非常流行的代码质量管控平台。通CheckStyle、findbugs等工具定位不同,SonarQube定位于平台,有完善的管理机制及强大的管理页面,并通过插件支持checkstyle及findbugs等既有的流..._sonar的客户端区别

元学习系列(六):神经图灵机详细分析_神经图灵机方法改进-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏27次。神经图灵机是LSTM、GRU的改进版本,本质上依然包含一个外部记忆结构、可对记忆进行读写操作,主要针对读写操作进行了改进,或者说提出了一种新的读写操作思路。神经图灵机之所以叫这个名字是因为它通过深度学习模型模拟了图灵机,但是我觉得如果先去介绍图灵机的概念,就会搞得很混乱,所以这里主要从神经图灵机改进了LSTM的哪些方面入手进行讲解,同时,由于模型的结构比较复杂,为了让思路更清晰,这次也会分开几..._神经图灵机方法改进

【机器学习】机器学习模型迭代方法(Python)-程序员宅基地

文章浏览阅读2.8k次。一、模型迭代方法机器学习模型在实际应用的场景,通常要根据新增的数据下进行模型的迭代,常见的模型迭代方法有以下几种:1、全量数据重新训练一个模型,直接合并历史训练数据与新增的数据,模型直接离线学习全量数据,学习得到一个全新的模型。优缺点:这也是实际最为常见的模型迭代方式,通常模型效果也是最好的,但这样模型迭代比较耗时,资源耗费比较多,实时性较差,特别是在大数据场景更为困难;2、模型融合的方法,将旧模..._模型迭代

base64图片打成Zip包上传,以及服务端解压的简单实现_base64可以装换zip吗-程序员宅基地

文章浏览阅读2.3k次。1、前言上传图片一般采用异步上传的方式,但是异步上传带来不好的地方,就如果图片有改变或者删除,图片服务器端就会造成浪费。所以有时候就会和参数同步提交。笔者喜欢base64图片一起上传,但是图片过多时就会出现数据丢失等异常。因为tomcat的post请求默认是2M的长度限制。2、解决办法有两种:① 修改tomcat的servel.xml的配置文件,设置 maxPostSize=..._base64可以装换zip吗

Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字-程序员宅基地

文章浏览阅读1k次,点赞17次,收藏22次。Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字

随便推点

ESXi 快速复制虚拟机脚本_exsi6.7快速克隆centos-程序员宅基地

文章浏览阅读1.3k次。拷贝虚拟机文件时间比较长,因为虚拟机 flat 文件很大,所以要等。脚本完成后,以复制虚拟机文件夹。将以下脚本内容写入文件。_exsi6.7快速克隆centos

好友推荐—基于关系的java和spark代码实现_本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。-程序员宅基地

文章浏览阅读2k次。本文主要实现基于二度好友的推荐。数学公式参考于:http://blog.csdn.net/qq_14950717/article/details/52197565测试数据为自己随手画的关系图把图片整理成文本信息如下:a b c d e f yb c a f gc a b dd c a e h q re f h d af e a b gg h f bh e g i di j m n ..._本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。

南京大学-高级程序设计复习总结_南京大学高级程序设计-程序员宅基地

文章浏览阅读367次。南京大学高级程序设计期末复习总结,c++面向对象编程_南京大学高级程序设计

4.朴素贝叶斯分类器实现-matlab_朴素贝叶斯 matlab训练和测试输出-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏12次。实现朴素贝叶斯分类器,并且根据李航《统计机器学习》第四章提供的数据训练与测试,结果与书中一致分别实现了朴素贝叶斯以及带有laplace平滑的朴素贝叶斯%书中例题实现朴素贝叶斯%特征1的取值集合A1=[1;2;3];%特征2的取值集合A2=[4;5;6];%S M LAValues={A1;A2};%Y的取值集合YValue=[-1;1];%数据集和T=[ 1,4,-1;..._朴素贝叶斯 matlab训练和测试输出

Markdown 文本换行_markdowntext 换行-程序员宅基地

文章浏览阅读1.6k次。Markdown 文本换行_markdowntext 换行

错误:0xC0000022 在运行 Microsoft Windows 非核心版本的计算机上,运行”slui.exe 0x2a 0xC0000022″以显示错误文本_错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行-程序员宅基地

文章浏览阅读6.7w次,点赞2次,收藏37次。win10 2016长期服务版激活错误解决方法:打开“注册表编辑器”;(Windows + R然后输入Regedit)修改SkipRearm的值为1:(在HKEY_LOCAL_MACHINE–》SOFTWARE–》Microsoft–》Windows NT–》CurrentVersion–》SoftwareProtectionPlatform里面,将SkipRearm的值修改为1)重..._错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行“slui.ex