精华内容
下载资源
问答
  • Android N(7.0) Vulkan替代OpenGL,图形学

    千次阅读 2019-04-24 19:05:55
    旨在替代OpenGL,提高图形性能。 基于OpenGL的图形引擎,其渲染过程粗略可分为 主机端资源准备,设备端数据交互与管线准备 及 每帧循环的渲染 三个部分。 Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以...

      Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯(Khronos)组织在2015年游戏开发者大会(GDC)上发表。旨在替代OpenGL,提高图形性能。
      基于OpenGL的图形引擎,其渲染过程粗略可分为 主机端资源准备,设备端数据交互与管线准备 及 每帧循环的渲染 三个部分。 Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。
      Vulkan在很大程度上汲取了AMD Mantle的灵感,但是进行了大幅度的扩展和增强,构成了一个完善的开发体系,功能和性能都十分丰富,拥有最新图形技术、通用目的计算、预编译着色器、多核心多线程高效率、底层驱动过载、横跨桌面/移动/主机/嵌入式、底层GPU硬件控制、精炼API。Vulkan 是完全从零开始设计,以最小化驱动器中的 CPU 开销,并能让您的应用更直接地控制 GPU 操作。Vulkan 还允许多个线程同时执行工作,如命令缓冲区构建,以获得更好的并行化。
      Vulkan支持的操作系统包括:Linux, Windows XP to Windows 10, android等。Vulkan还可以支持主流的GPU,包括:AMD, NVIDIA, Adreno, PowerVR, Mali等桌面GPU和移动GPU。
      Vulkan的shading language环境: Vulkan不再使用GLSL作为shading language的输入,而是使用一个统一的中间代码(SPIR)作为输入。OpenGL/OpenGL ES或者游戏引擎使用的GLSL都会被一个SPIR-V解释器翻译成SPIR表示。未来其它的shading language或者通用计算的语言也会被翻译成SPIR作为Vulkan的输入。这可以使Vulkan驱动专注于shader的后端优化,而不是前端的语法解析,语义分析等。对于GLSL转SPIR,Khronos正在考虑实现一个编译器前端来帮助应用程序转换。

    The Khronos Group ,vulkan 开源集- https://github.com/KhronosGroup
    关于Vulkan的详细使用参考这个Demo- https://github.com/SaschaWillems/Vulkan
    Vulkan标准参考Khronos官网- https://www.khronos.org/registry/vulkan/specs/1.0/refguide/Vulkan-1.0-web.pdf
    OpenGL的替代者 Vulkan- https://blog.csdn.net/coloriy/article/details/79908631

      OpenGL还算是对初学者比较友好的API,但到了Vulkan,由于严格把pipeline、descriptor、buffer分开,初学者上手难度变大了,App开发者直接调用图形API的情况将会减少,更多地会依赖于图形引擎。因此,Vulkan标准的渐渐普及会加速开发者的层级分划,使用Vulkan的人将是专业研究图形引擎或作GPGPU算法引擎的人。
      对于有志于研究图形的初学者,可以直接学习Vulkan,不用去学习OpenGL了,Vulkan标准与GPU工作原理更为贴近,学习 Vulkan更有利于掌握图形显示的知识。

    展开全文
  • opengl中有一行代码: gluOrtho2D(0, windowWidth, 0, windowHeight); 现要移植到android, 通过NDK实现, 好像找不到gluOrtho2D这个API, 据说是GLES上没有这个API, 有什么其它方式替代呢?
  • #define KPI 3.1415926 void Perspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); double xmin, xmax, ymin, ymax;... xmi

    展开全文
  • OpenGL替代者——Vulkan

    万次阅读 2016-12-20 15:45:30
    旨在替代OpenGL,提高图形性能。基于OpenGL的图形引擎性能瓶颈基于OpenGL的图形引擎,其渲染过程粗略可分为 主机端资源准备,设备端数据交互与管线准备 及 每帧循环的渲染 三个部分。 资源加载这一过程跟GPU没有

    OpenGL的替代者——Vulkan

    Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯(Khronos)组织在2015年游戏开发者大会(GDC)上发表。旨在替代OpenGL,提高图形性能。

    基于OpenGL的图形引擎性能瓶颈

    基于OpenGL的图形引擎,其渲染过程粗略可分为 主机端资源准备,设备端数据交互与管线准备 及 每帧循环的渲染 三个部分。
    性能分析

    资源加载

    这一过程跟GPU没有太大关系,主要是为了进行显示之前的图片解码、字体解析、3D模型解析等等。一般可以放到其他线程中执行,避免影响显示。

    数据交互与管线准备

    Prepare
    这一过程主要是将必要的数据传到GPU可以读到内存中去,以及准备GPU的指令。
    1、纹理上传
    2、Shader的编译与Program的链接
    3、VBO的数据上传

    每帧的图形渲染

    OpenGL_Origin
    1、数据交互耗时。
    这里主要需要设常量区的数据。我们绝大部分情况都是在绘制变化的物体,而变化相关的属性主要体现在常量区,因此每帧渲染都需要重新设一遍常量数据。
    2、调用Drawcall耗时。
    DrawCall指真正执行绘制任务的图形API,如glDrawArrays, glDrawElements。调用这些API时,GPU驱动需要产生GPU硬件所能识别的任务,并发送到内核,等待调度执行。

    Vulkan编程

    关于Vulkan的详细使用参考这个Demo:
    https://github.com/SaschaWillems/Vulkan

    Vulkan标准参考Khronos官网:
    https://www.khronos.org/registry/vulkan/specs/1.0/refguide/Vulkan-1.0-web.pdf

    编程流程

    基本的Vulkan编程流程:
    Basic
    这个流程和OpenCL的使用流程很像,就是找到设备——创建上下文——创建命令队列——准备任务——发送执行。

    Vulkan的窗口系统(WSI)(与EGL标准类似):
    Target
    注意到,在移动设备上使用OpenGL时,我们必须通过egl的API先准备好Surface和Context,而在Vulkan标准里面,WSI只是为Command Buffer 提供了 VkFrameBuffer,这个是图形渲染的输出。

    Pipeline

    创建Command Buffer 的三个重要元素分别为 VkDescriptorSet(纹理和常量)、VkPipeline(着色器和状态)和VkBuffer(顶点数组)。
    官网上对Pipeline由下图描述:
    Pipeline

    以前的GLProgram现在对应于一个VkPipeline,但VkPipeline除了Program之外,还覆盖了 blend,cull face 等状态:
    VkPipeline
    Vulkan中的Shader只支持spv的标准二进制格式,我们所写的glsl都必须通过官方的一个转换器转换为二进制格式。这样做就不需要GPU驱动去做语法解析等编译前端工作了。

    以前在OpenGL中用的Texture 现在由VkImage描述:
    Texture

    Command Buffer

    一个用于图形渲染的 VkCommandBuffer 制作过程如下图:
    CMD
    如图所示,Command Buffer 里面设定了图形渲染所需要的视口、裁剪、管线(各种状态配置和着色器)、顶点数组、描述(纹理、程序常量等)这些属性,之后再发送到命令队列(VkQueue)中就可以执行。

    Vulkan的优势

    效率上的提升

    Vulkan在效率上的提升主要是它天然支持多线程:

    异步数据交互

    使用OpenGL时,如果把数据交互放到另一个独立线程中完成,将会引起冲突,这个原因是上传资源和进行绘制时都需要改变上下文:
    Conflict

    用Vulkan则没有这个问题:
    Texture

    并行绘制

    由于绘制时要改变上下文,OpenGL的并行绘制无疑也不可能了:
    DrawConflict

    Vulkan可以并行创建Command Buffer,但由于Command Buffer 提交后就都是GPU驱动怎么执行的事了,执行的过程没必要也没可能用多线程加速。
    Parallel

    复用Command Buffer

    OpenGL 每帧绘制时,都需要在驱动层重新建一个Command Buffer 传递下去,而 Vulkan 是在应用层建好 Command Buffer,每帧绘制时Sub上去。

    便于模块化

    虽然初看上去Vulkan比OpenGL复杂了许多,需要多写不少代码,但真正到软件开发时,由于Vulkan、OpenGL大部分情况都是用来写引擎,中间件的,维护代码的时间会远大于开发代码的时间,多写那几行代码根本不算啥。
    Vulkan更容易封装,各子模块之间互不影响,软件架构设计会轻松不少,开发维护起来更为方便。
    而基于OpenGL开发的各子模块之间总有各种各样因为状态机的缘故引发的Bug,比如:
    1、A模块用了VBO,B模块没有用,集成在一起时由于B模块没有把GL_ARRAY_BUFFER 重新绑定为0,出现段错误。
    2、A模块内部使用了FBO,使用FBO时重新设置了裁剪区域和视口大小,使用完成后没有恢复,导致集成之后,后续的模块绘制出现问题。
    如果基于Vulkan开发,上述的状态不一致的问题将会少很多。

    当然,基于Vulkan开发的引擎一般会用多线程加速,这个也会有不少坑,但为了更好的性能,也是值得的。

    Vulkan对开发者的影响

    OpenGL还算是对初学者比较友好的API,但到了Vulkan,由于严格把pipeline、descriptor、buffer分开,初学者上手难度变大了,App开发者直接调用图形API的情况将会减少,更多地会依赖于图形引擎。因此,Vulkan标准的渐渐普及会加速开发者的层级分划,使用Vulkan的人将是专业研究图形引擎或作GPGPU算法引擎的人。

    对于有志于研究图形的初学者,可以直接学习Vulkan,不用去学习OpenGL了,Vulkan标准与GPU工作原理更为贴近,学习 Vulkan更有利于掌握图形显示的知识。

    展开全文
  • OpenGL

    2016-08-13 10:15:36
    GLUT用于窗口设计,90年代已停止更新,替代品有freeGULT,但是听说freeGULT bug很多,后来出现新的替代品GLFW。 GLUT GLUT(OpenGL Utility Toolkit)封装OpenGL,用于窗口设计。 头文件:#incldue 编译:cc -o ...

    GLUT用于窗口设计(窗口显示,事件处理),90年代已停止更新,替代品有freeGULT,但是听说freeGULT bug很多,后来出现新的替代品GLFW。


    GLEW

    GLEW的功能是为程序在运行时动态加载OpenGL API,相当于一个加载工具。

    它提供了一种机制,让程序在运行时决定支持哪一种OpenGL扩展。

    http://glew.sourceforge.net/


    GLX

    GLX用来将OpenGL与X Window系统对接。


    GLU

    GLU(OpenGL Utility Library)封装OpenGL,用于绘图。


    GLUT

    GLUT(OpenGL Utility Toolkit)封装OpenGL,用于窗口设计。

    头文件:#incldue <GL/glut.h>

    编译:cc -o foo foo.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm

    API:glutXxx,V3大约有90+个API函数。


    GLFW

    GLFW是GLUT的替代品。


    DRI


    OpenGL API

    设置几何图元:在glBegin()和glEnd()之间调用下面函数。

    glVertex*()  // 设置顶点坐标

    glColor*()  // 设置RGBA颜色

    glIndex*()  // 设置颜色索引

    glSecondaryColor*()  // 设置纹理应用后的辅助颜色

    glNormal*()  // 设置发现向量坐标

    glMaterial*()  // 设置材料属性

    glFogCoord*()  // 设置雾坐标

    glTexCoord*()  // 设置纹理坐标

    glMultiTexCoord*()  // 为多重纹理设置纹理坐标

    glVertexAttrib*()  // 设置通用的顶点属性

    glEdgeFlag*()  // 控制边界的绘制

    glArrayElement()  // 提取顶点数组数据

    glEvalCoord*(), glEvalPoint*()  // 生成坐标

    glCallList(), glCallLists()  // 执行显示列表


    Capability

    glEnable()  // 打开指定的Capability

    glDisable()  // 关闭指定的Capability

    glIsEnabled()  // 查询Capability是否打开


    查询参数

    glGetBooleanv()  // 查询布尔型变量

    glGetIntegerv()  // 查询整型变量

    glGetFloatv()  // 查询单精度浮点型变量

    glGetDoublev()  // 查询双精度浮点型变量

    glGetPointerv()  // 查询指针类型状态变量



    展开全文
  • gluLookAt函数原理是生成一个modelview矩阵,之后作用于图形的坐标上,所以可以推导出其等价的矩阵,将此矩阵与当前的modelview矩阵相乘,从而达到替代gluLookAt函数的效果。 参考文章1:...
  • gluPerspective and gluLookAt 在OpenGL-ES中的替代
  • 在应用的开发过程中,我们避免不了要使用Opengl共享context的技术。比如我们需要在预览的同时还要将预览的画面传递给MediaCodec进行编码。有的朋友会说Camera2可以设置多个surface,这样就可以把预览的surface和...
  • SwiftShader 实现 Chrome 和 Android 使用的相同的 OpenGL ES 图形 API。SwiftShader 开放源码将促使其他浏览器供应商普遍支持 3D 内容,从而使网站平台作为一个整体向前发展。具体而言,无条件的 WebGL 支持将允许...
  • OpenGL上的纹理状态跟着纹理ID走

    千次阅读 2016-12-17 15:01:45
    引擎每次设置纹理状态时,都会检查一下状态是否已经是当前值,这样就会减少不必要的api调用.... 发现出了一个叫Vulkan的图形API,替代opengl es的.概念向d3d12看齐,与时俱进的东西.花一些时间学习下.
  • OpenGL 2.0

    2011-05-09 21:44:59
    功能性 功能性 新API里的一些特色包括有: ...1.3固定式的替代功能。新的着色器可自动纪录现有的OpenGL状态(例如进行一个简单的光源转换而无须覆写参数管理)。它以C为架构,...
  • opengl的坑

    2018-11-22 15:32:47
    opengl窗口、鼠标事件等扩展的发展历程(疑惑于glfw与glut的关系,后面的都可以当做前面的替代品):aux-&gt;glut-&gt;freeglut-&gt;glfw 现代OpenGL已经弃用(从OpenGL 3.0开始)经典管线功能...
  • 学习资料:opengl 超级宝典 第5版 环境:vs2013 准备:1、freeglut库 http://freeglut.sourceforge.net/index.php#download freeglut用来替代glut的,虽然现在好像glfw更好,但是因为跟着书来所以还是先使用...
  • VC6.0配置OpenGL

    2015-05-11 20:12:30
    OpenGL 官网:http://www.opengl.org   个人环境配置: VC6.0 + GLUT3.7 注明:GLUT GLUT是OpenGL应用工具包,英文全称为...作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。   是一个
  • OpenGL环境搭建2-Windows

    2019-08-05 23:21:24
    freegult -- GLUT的一个完全开源替代库 GLEW -- OpenGL扩展库是个简单的工具,用于帮助C/C++开发者初始化扩展(OpenGL扩展功能)并书写可移植的应用程序。GLEW当前支持各种各样的操作系统,包含Windows,Linux,...
  • 此软件包旨在替代 ,后者不提供相同级别的兼容性。 请注意, bindbc-gl当前不支持不推荐使用的OpenGL功能。 将bindbc-opengl添加到您的项目 默认情况下, bindbc-opengl配置为在禁用-betterC兼容性的情况下进行...
  • VS2010配置opengl

    千次阅读 2013-03-05 20:13:00
    OpenGL 官网:http://www.opengl.org 个人环境配置: VS2010+ GLUT3.7 注明:GLUT GLUT是OpenGL应用工具包,英文全称为...作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。 是一个学习Op
  • GLUT(OpenGL工具包)

    2017-10-31 18:34:53
    GLUT代表OpenGL应用工具包,英文全称为OpenGL Utility Toolkit,是一个和窗口系统无关的软件包,它由Mark Kilgard在SGI时写的。作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂性。
  • OpenGL是一个开源的图形库,既可开发二维图形软件,也可开发三维图形软件。许多知名应用就是基于OpenGL开发出来,如著名的Artoolkit和Unity3D。...作为AUX库的功能更强大的替代品,用于隐藏不同窗口系统API的复杂
  • OpenGL也定义 GLvoid类型,如果用C语言编写,可以用它替代void类型。不同的C编译器或环境对各种C变量的大小和内存分布都有自己的规则。使用 OpenGL定义的数据类型就可以隔离开这些不同。  下表列出了W...
  • 要注意纹理单元和纹理的概念,纹理替代绑定纹理单元0 6,影子文件 阴影贴图 两步渲染:1,使用帧长度延伸深度纹理,通过光的角度,取代一遍物体2,画阴影平面,通过光的角度,利用上一次深度纹理,对比平面上点的...
  • 花了四天的时间, 把一款FPS游戏引擎Fly3D 转到OpenGL ES上, 众所周知, ES是面向移动设备的, 所以,为了效率, 它对OpenGL进行了很多的筛减, 把一些没有效率的函数如(glBegin)全部扔掉了, 一些绘制的类型如GL_POLYGON也...
  • VS2013搭建OPENGL环境

    千次阅读 2016-12-07 23:00:46
    它作为AUX库的功能更强的替代品,用于隐藏不同窗口系统API的复杂性。 GLUT的子程序的前缀使用”glut”。 在Windows下安装glut库: 所以首先要下载glut库,可从OpenGL的官网上下载:http://www.op
  • OpenGL纹理过滤以及纹理Wrapping mode

    千次阅读 2016-05-28 00:02:40
    为了避免产生抖动或者闪烁,OpenGL必须对纹理图像进行过滤,适当的对它进行缩小,是它在映射到无替代 表面时,不会产生令人不快的人工视觉效果。为了避免这种效果,我们可以指定一系列预先过滤的分辨率递减的问题...
  • OpenGL(1)入门简介

    2020-06-12 00:53:56
    OpenGL(一)入门简介 什么是OpenGL OpenGL(Open Graphics Library, 开放式图形库)。我们常用的平时使用的库包括: gl:核心库;...glut: (OpenGL Utility Toolkit)实用工具库,替代(aux);基本的窗口

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

替代opengl