OpenGL与Direct3D

OpenGL(wiki  chs)/ OpenGL ES(wiki  chs)是跨平台的,OpenGL广泛用于PC平台(windows、Linux、Unix、Mac OS X),OpenGLES则用于移动端平台(Android、iOS),以C的方式提供API

WebGL(wiki  chs)是跨平台3D图形Web标准,被各大web浏览器厂商广泛支持,使用JavaScript语言提供API,不使用插件的情况下在兼容的web浏览器的Canvas上呈现交互式3D图形

Direct3D(wiki  chs)是DirectX(wiki  chs)套装的一部分,只能用于windows相关的平台,用C++实现,并以COM的方式提供API

OpenGL与Direct3D是多年的竞争关系,wiki上有一篇:Comparison of OpenGL and Direct3D

固定管线到可编程管线进化版本

3D API 最后只支持固定管线的版本 第一个支持可编程管线版本 第一个只支持可编程管线版本
OpenGL 1.5 2.0 3.1
OpenGL ES 1.1 2.0 2.0
WebGL 1.0 1.0
Direct3D 7.0 8.0 10.0

OpenGL、OpenGL ES和WebGL

OpenGL版本 Shader版本 OpenGL ES WebGL
OpenGL 1.1(1997.3.4)      
OpenGL 1.2(1998.3.16)      
OpenGL 1.3(2001.8.14)   OpenGL ES 1.0(2003.7.28)  
OpenGL 1.4(2002.7.24)      
OpenGL 1.5(2003.7.29)  
OpenGL ES 1.1(兼容1.0版本)

 
OpenGL 2.0(2004.9.7) GLSL 1.1 OpenGL ES 2.0(2007.3) WebGL 1.0
OpenGL 2.1(2006.7.2) GLSL 1.2    
OpenGL 3.0(2008.8.11) GLSL 1.3    
OpenGL 3.1(2009.3.24) GLSL 1.4    
OpenGL 3.2(2009.8.3) GLSL 1.5(Geometry Shaders)    
OpenGL 3.3(2010.3.11) GLSL 3.30    
OpenGL 4.0(2010.3.11) GLSL 4.00(Tessellation Shaders)    
OpenGL 4.1(2010.7.26) GLSL 4.10    
OpenGL 4.2(2011.8.8) GLSL 4.20    
OpenGL 4.3(2012.8.6) GLSL 4.30(Compute Shaders) OpenGL ES 3.0(2012.8,兼容2.0版本) WebGL 2.0
OpenGL 4.4(2013.7.22) GLSL 4.40    
    OpenGL ES 3.1(2014.3,向前兼容至2.0版本)  
OpenGL 4.5(2014.8.11) GLSL 4.50    
    OpenGL ES 3.2(2015.8,向前兼容至2.0版本)  
OpenGL 4.6(2017.7.31) GLSL 4.60    

扩展阅读:History of OpenGL

Direct3D

D3D版本 Shader版本 OS版本
Direct3D 7.0(1999.9.22)   Win98
Direct3D 8.0(2000.10.12) PS1.1、VS1.1 Win2000
Direct3D 8.1(2001.10.25) PS1.4、VS1.1 WinXP
Direct3D 9.0(2002.11.19) SM2.0 WinXP
Direct3D 9.0b(2003.8.13) PS2.0b、VS2.0 WinXP

Direct3D 9.0c

2004.10~2010.6(每2月更新一个版本)

DXSDK_Jun10.exe是其最后一个版本

SM3.0 WinXP

Direct3D 9.0L(Direct3D 9Ex)

在Vista上使用WDDM驱动来跑Direct3D 9.0c的程序

SM3.0 Vista Only
Direct3D 10.0(2006.11.30) SM4.0(Geometry Shaders) Vista

Direct3D 10.1(2008.2.4)

SM4.1 Vista SP1

Direct3D 11.0(2009.10.22)

(2011.2.16)

SM5.0(Tessellation Shaders、Compute Shaders)
Win7

Win7 SP1

Direct3D 11.1(2012.8.1) SM5.0 Win7 SP1、Win8
Direct3D 11.2(2013.10.18) SM5.0 Win8.1
Direct3D 12.0(2015.7.29) SM6.0 Win10

OpenGL与Direct3D对应关系

OpenGL版本 D3D版本 OS版本
OpenGL 2.1 Direct3D 9.0(SM2.0) WinXP

OpenGL 3.0~3.1

Direct3D 9.0c(SM3.0) WinXP

OpenGL 3.2~3.3


Direct3D 10.0(SM4.0)

Vista

OpenGL 4.0~4.6


Direct3D 11.0(SM5.0)

Win7

显卡与驱动

显卡支持Direct3D和OpenGL版本由驱动程序决定的,在硬件不支持的情况下,可以由驱动退回到软件执行。GPU并不知道自己执行的是哪个API,以及是什么版本

例如:一些老显卡可通过提供win10新驱动来支持D3D12;驱动可以返回自己支持的feature level,runtime根据这个来确定哪些功能有,那些没有。

扩展阅读:支持dx12的显卡有哪些?目前完整支持DirectX12的显卡列表详解

PC平台显卡

桌面显卡性能天梯图:http://www.mydrivers.com/zhuanti/tianti/gpu/index.html

秋刀鱼半藏整理的天梯图:https://pic1.zhimg.com/v2-2f1801c8ba1988962caa7ec865c55601_r.jpg

笔记本显卡性能天梯图:http://www.mydrivers.com/zhuanti/tianti/gpum/index.html

花飞羽落整理的天梯图(含桌面和笔记本):https://tieba.baidu.com/p/5562043942

手机平台GPU:

手机gpu性能天梯图:http://12601618.s21i.faiusr.com/4/ABUIABAEGAAgwauaxQUo4o6R_gQw-gg4qxI.png

Direct3D库、显卡和驱动

在windows系统上,使用dxdiag来查看当前所能支持的Direct3D版本

OpenGL库、显卡和驱动

由于Direct3D是竞争关系,OpenGL在windows的集成的库是1.1的版本

在windows系统上,可使用GPU_Caps_Viewer工具查看当前所能支持的OpenGL版本

OpenGL ES库、显卡和驱动

OpenGL ES版本 Android版本 iOS版本 Android机GPU 苹果机GPU
1.0 Android 1.0(API 1)+      
1.1 Android 1.6(API 4)+      
2.0 Android 2.2(API 8)+ iOS5+(iPad, iPad Mini, iPhone 3GS版本及以上)    
3.0 Android 4.3(API 18)+ iOS7+(iPhone 5S, iPad Air, iPad Mini2版本及以上)
高通:Adreno 300 and 400 series+

ARM:Mali T600 series+

Nvidia:Tegra4


Imagination:PowerVR 6 series+

包括:G6400, G6430, G6200, G6230, G6630

3.1 Android 5.0(API 21)+  
高通:Adreno 400 and 500 series

ARM:Mali T6xx (midgard)+

Nvidia:Tegra K1 and X1


Imagination:PowerVR 6, 6XE, 6XT, 7XE and 7XT

6XE包括:G6050, G6060, G6100, G6110
6XT包括:G6250, G6450, G6650
7XT包括:GT7200, GT7400, GT7600, GT7800, GT7900

3.2 Android 6.0(API 23)+  
高通:Adreno 420 series+

ARM:Mali T760 series+

 

几乎所有的Android设备支持OpenGL ES 2.0,所以比较推荐使用这版本开发应用程序。

Android支持情况占比:https://developer.android.google.cn/about/dashboards/#OpenGL

Android版本与API级别对应关系:https://source.android.com/source/build-numbers#platform-code-names-versions-api-levels-and-ndk-releases

OpenGL ES各版本API说明:https://www.khronos.org/opengles/

WebGL

桌面平台浏览器

Chrome:9+版本支持WebGL1.0;56+版本支持WebGL2.0

windows平台下会使用ANGLE(Almost Native Graphics Layer Engine)技术将OpenGL ES转成拥有更好驱动支持的D3D 9.0c或D3D 11(2013.9加入)

可带上–use-gl=desktop参数启动Chrome来关闭ANGLE,强制让其使用OpenGL ES来作为WebGL的渲染器

使用测试页面WebGL Browser Report来看是否已经关闭ANGLE

FireFox:4.0+版本支持WebGL1.0;51+版本支持WebGL2.0

从2013年起,windows平台下也会使用ANGLE(Almost Native Graphics Layer Engine)技术将OpenGL ES转成拥有更好驱动支持的D3D 9.0c或D3D 11

可在about:config页面中将webgl.prefer-native-gl修改为true或webgl.disable-angle设置成false来关闭ANGLE,强制让其使用OpenGL ES来作为WebGL的渲染器t

Safari:6.0+(Mac OS X Lion)、5.1+(Mac OS X Snow Leopard)支持WebGL1.0,8.0之前的版本缺省是关闭的

IE:11支持WebGL1.0,早期的IE版本可使用IEWebGL插件来支持WebGL

Edge:0.95+版本支持WebGL1.0

移动平台浏览器

Chrome(Android):25+版本支持WebGL1.0,30之前的版本缺省是关闭的

FireFox(Android):4+版本支持WebGL1.0

Safari(iOS):iOS8下Safari开始支持WebGL1.0

更详细地浏览器支持情况:https://en.wikipedia.org/wiki/WebGL#Support

查询当前浏览器WebGL1.0支持情况:http://webglreport.com/?v=1

查询当前浏览器WebGL2.0支持情况:http://webglreport.com/?v=2

webGL示例效果

WebGL Dynamic Cube

Three js

参考

跨越OpenGL和D3D的鸿沟(一):开篇

跨越OpenGL和D3D的鸿沟(二):现代OpenGL

跨越opengl和d3d的鸿沟(三):交集?并集?

跨越opengl和d3d的鸿沟(四):完结篇,平台和未来

原文地址:https://www.cnblogs.com/kekec/p/12417055.html

时间: 2024-10-18 18:27:34

OpenGL与Direct3D的相关文章

图形世界分裂的两派——理清Direct3D和OpenGL的脉络

计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术,API(Application Programming Interface)即"应用程序接口"是连接应用程序与操作系统.实现对计算机硬件控制的纽带,Direct3D和OpenGL是目前的两大3D图形 API,要在你的3D显卡上进行3D特效的制作.实现都必须通过它们(Vooodoo迷们肯定对Glide接口记忆尤深,可惜已随着3dfx的倒闭而作古,其它还有Heidi等接口).关于D3D和OpenGL的理论

OpenGL版本与OpenGL扩展机制

OpenGL版本与OpenGL扩展机制 1 opengl的版本区别(在opengl官方文档中有详细说明)    针对Opengl不同版本的升级是主要是扩展指令集.    现在版本是4.0啦1.1 opengl1.11995年,SGI推出了更为完善的OpenGL 1.1版本.OpenGL 1.1的性能比1.0版提高甚多.其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置.法线.颜色.色彩指数.纹理坐标.多边形边缘标识的传输速度,引入了新的纹理特性等等.1.

OpenGL的版本历史和发展

来源请注明,本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html OpenGL®作为业界最为广泛使用的2D和3D图形接口标准,应用在成千上万的各式各样的计算机的程序中.从初期的崭露头角,到与Direct3D激烈竞争,后经历黯淡被Khronos接手又发扬光大,已经历经波折发展了20年.由于过去的黯淡,至今甚至仍有人站在错误的时间角度认为它是落后的--它从未停止它前进的步伐,这篇文章就来简述OpenGL的版本历史和发展. O

OpenGL快问快答

OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. 我写这个是为了加深印象,好记性不如烂笔头,好记星不如烂键盘. +BIT祝威+悄悄在此留下版了个权的信息说: 名词术语 渲染:等于"画",等于"draw". OpenGL是什么? OpenGL是Open Graphics Library(开源图形库)的缩写.它是一本说明书

OpenGL的版本号历史和发展

来源请注明.本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html OpenGL®作为业界最为广泛使用的2D和3D图形接口标准.应用在成千上万的各式各样的计算机的程序中.从初期的崭露头角,到与Direct3D激烈竞争.后经历黯淡被Khronos接手又发扬光大.已经历经波折发展了20年. 由于过去的黯淡.至今甚至仍有人站在错误的时间角度觉得它是落后的--它从未停止它前进的步伐,这篇文章就来简述OpenGL的版本号历史和发展.

(转载)OpenGL: 你不知道的左右手坐标系

原文地址:http://blog.csdn.net/augusdi/article/details/20450691 左右手坐标系 众所周知,OpenGL使用的是右手坐标系,而Direct3D使用的是左手坐标系. 除了上面Z轴的方向不一样外,左右手坐标系的还有其他区别: 正向旋转方向:在左手系中用Left-Hand Rule判别,正方向是顺时针方向.在右手系中,用Right-Hand Rule判别,是逆时针方向. 叉积的方向:在右手坐标系中,叉积的方向通过Right-Hand Rule确定,而在

OpenGL: 你不知道的左右手坐标系

左右手坐标系 众所周知,OpenGL使用的是右手坐标系,而Direct3D使用的是左手坐标系. 除了上面Z轴的方向不一样外,左右手坐标系的还有其他区别: 正向旋转方向:在左手系中用Left-Hand Rule判别,正方向是顺时针方向.在右手系中,用Right-Hand Rule判别,是逆时针方向. 叉积的方向:在右手坐标系中,叉积的方向通过Right-Hand Rule确定,而在左手坐标系中,叉积的方向则由Left-Hand Rule 确定. World Space 坐标系 World Spac

OPENGL架构

第2章 OpenGL 简介 每台计算机都有专门处理图形的硬件,它们控制着屏幕上显示的内容.OpenGL向这种硬件发出命令,告诉它们执行什么操作.计算机游戏或者其他任意软件借助制造商提供的设备驱动程序,使用OpenGL向图形硬件发出命令,如图2-1所示.   图2-1  OpenGL的典型应用 OpenGL(Open Graphics Library,开放图形库)是游戏开发商使用最早.最流行的图形库之一.OpenGL是Silicon Graphics公司(SGI)在1992年开发的,但是直到199

最简单的视音频播放示例4:OpenGL播放RGB/YUV

本文记录OpenGL播放视频的技术.OpenGL是一个和Direct3D同一层面的技术.相比于Direct3D,OpenGL具有跨平台的优势.尽管在游戏领域,DirectX的影响力已渐渐超越OpenGL并被大多数PC游戏开发商所采用,但在专业高端绘图领域,OpenGL因为色彩准确,仍然是不能被取代的主角. OpenGL简介 从网上搜集了一些有关OpenGL简介方面的知识,在这里列出来.开放图形库(英语:Open Graphics Library,缩写为OpenGL)是个定义了一个跨编程语言.跨平