WebGL常见问题.doc

上传人:飞****9 文档编号:136128628 上传时间:2020-06-24 格式:DOC 页数:8 大小:23.50KB
返回 下载 相关 举报
WebGL常见问题.doc_第1页
第1页 / 共8页
WebGL常见问题.doc_第2页
第2页 / 共8页
WebGL常见问题.doc_第3页
第3页 / 共8页
WebGL常见问题.doc_第4页
第4页 / 共8页
WebGL常见问题.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《WebGL常见问题.doc》由会员分享,可在线阅读,更多相关《WebGL常见问题.doc(8页珍藏版)》请在金锄头文库上搜索。

1、WebGL: 常见问题WebGL是什么?WebGL是一个low-level(这里是翻译成底层还是低级呢?我拿捏不好)的JavaScript API,这个API提供了一种能力使得网页上脚本和计算机图形硬件直接交互。这就让我们在浏览器里创建,实时运行3D图形成为可能,这是一种Web的标准,(运行的浏览器)不需要另外装插件,不久以后这种技术会被越来越多的智能手机所支持。许多人把WebGL当做HTML5的新技术。WebGL由Khronos管理维护,Khronos是一个向许多其他标准的负责的机构,包括很多人知道的OpenGL开发库,和比较少人知道的运行在嵌入式设备上的“embedded”版本OpenGL

2、 ES,WebGL就是基于OpenGL ES的。我怎么让WebGL运行在本地机器上?首先,需要一个支持WebGL的网络浏览器版本,比如Firefox,chrome,Safari。如果我使用微软的IE怎么样?到目前写这篇文章的时候,微软还没有宣布任一个版本的IE支持WebGL,他们即将发行的新版本IE 9宣布采用了许多现有的网页进行图形卡加速的技术,但是也没用新的技术WebGL。同时他们也没有明确说明要回避WebGL,这意味着似乎在短期内,他们打算支持这项技术。(同时要说明的是,以微软一贯的作风,他们似乎会推出一个不开放的图形卡加速系统,DirectWeb?)。总之,这意味着IE的用户目前无法使

3、用WebGL,起码如果在非插件的标准版本IE下无法做到。有些人能改变自己的浏览器。对于那些习惯IE的用户,短期内有一个权宜措施,Chrome Frame是一个IE的插件,用来处理网页中的特殊渲染,使用Chrome渲染引擎替代普通的IE引擎。有点类似“JavaScript欺骗”,当你用IE打开一个网页的时候,后台使用Chrome渲染它,告诉用户Chrome是否要被使用。非IE用户正常的打开网页,不会受到什么影响。尽管Chrome Frame特征列表里目前还不支持WebGL,但是如果连Chrome都支持了WebGL,相信很快Chrome Frame同样也能支持。当然使用插件不是一个完美的解决方案,

4、但总好过什么都不做。WebGL已经做好了作为一个产品的准备了吗?这个问题可以分成3个问题。WebGL的规格什么时候到达1.0版本?WebGL工作组还没用宣布一个日期,尽管他们很乐观这个时间已经不远了,如何你想知道确切的日期,请自己去GOOGLE。WebGL什么时候能成为浏览器里的一个标准?很有可能就在在1.0版本发行以后!什么时候有足够的人使用WebGL,并且能在网站上运用?这个自然取决于网民升级自己浏览器的的频率啦。上文里说过,IE的用户使用WebGL会遇到一点麻烦,需要插件解决。大部分Chrome用户可以在新版本发布出来以后一个月之内自动升级,Firefox用户的升级速度取决于使用最大版还

5、是最小版。为什么当我查看WebGL网页时,CPU占用率100%?很多WebGL例子都会重绘画布,即使在画面没什么更新的情况下。所以当你抱怨为什么看一幅静止的图画时,CPU的占有率都会如此之高。这就是原因。你也许会怀疑CPU的高占用率,因为大部分工作不是都交给图形卡了吗?要回答这个问题有点复杂。首先WebGL渲染出来的图像都是放在HTML的画布(canvas)上,这个画布同时也要放置别的HTML元素。比如说,把一个HTML元素重叠在WebGL图像之上,WebGL图像包含了透明的比特位(和ALPHA类似)使得他覆盖的其他元素可以透明的显示。HTML图像和WebGL图像的混合过程,当前的浏览器都是用

6、一种迂回的方法来完成,渲染出一幅WebGL图像的过程上在图形卡里完成,然后获得一个HTML图像的过程依据浏览器的不同而不同,最后,两幅图像的混合过程在CPU里完成。如果你有一张很大的HTML画布,又要在混合大量的图像,这些都在CPU里计算完成,结果就会造成你的CPU占用率100%。好消息是浏览器的设计者已经意识到这个问题,希望不久的将来能得到解决。安全性怎么样?当说到“给予网页访问图形硬件的能力”时,许多人就开始讨论它的安全性。其实WebGL没有听起来的那么危险。相对于那些JavaScript扩展里能够暴露给黑客的安全漏洞来说,WebGL也没有什么特别不安全的。黑客可以写一个WebGL网页让你

7、的图形卡停止对别的应用程序响应,这在Vista和Win7系统下是令人烦恼的,但不是灾难性的,因为操作系统可以检测到错误,然后重新设定你的图形卡。但是在Mac系统下,黑客有可能能够冻结你的屏幕。在Linux下可能发生的情况就依据你所用的显卡和驱动版本了,Intel为ATI显卡的驱动可以检测到显卡的错误,然后重新设定。目前NVIDIA的显卡驱动没有这种检测功能。Linux系统下的情况就是,当你显卡出现问题时,操作系统只是有可能重新设定显卡,这个问题将来可能能得到解决(通常Linux下的任何东西都比较糟,这不是我讲的!)。通过升级浏览器可能可以避免安全问题,但是除非在WebGL中,对程序员能够使用的

8、3D图形功能做严格的限制,否则安全问题终究难以解决。写WebGL为什么编写WebGL程序这么难?WebGL是一个low-level的API,设计它时既要考虑访问能力从Javascript到底层的显示卡,兼容性既要考虑到配有NVIDIA或者ATI显卡的电脑,也要考虑一些掌上设备,例如智能手机,同时也要兼顾函数数量最少化,和数据类型最少化。尤其,WebGL是继承OpenGL ES(这是一个为移动设备削减的版本)而来。这是一个纯粹的可编程管道,没有什么固定的函数支持。早期的OpenGL库提供过剩的帮助函数方便初学者开始,但是专家基本上不用这些函数。抛弃这些帮助函数使我们的图形库更小,更简单,这对于应

9、用到嵌入式设备上来说是一件好事,但是同时也增加了初学者开始的难度。有一个好消息,如果你不想去学习low-level的WebGL,你也可以选择一个high-level的作为替代。WebGL提供一个可靠的框架,保证能够运行在任何兼容的设备上,WebGL小组在努力,使之更独立于浏览器的实现,提供一个框架让程序员编程更简单,而且能够运行在所有支持WebGL的浏览器上。JavaScript会不会太慢了?建立在浏览器里面的JavaScript引擎越来越快了,但是对于应用数值型的计算来说,它还是太慢了,比如,你肯定不会像用JavaScript做一个物理引擎出来吧。如果你想要你的WebGL页面运行更快,有下面

10、两种选择:1:尽可能的把东西都放进着色器里面去!着色器的代码一般都是运行在并行的图形卡上面,通常比你想象的还要快。例如,我们可以把场景拾取和碰撞检测的任务都交给着色器吧。2:如果可以,工作留给服务器端完成。为什么在JavaScript里,我不能编写着色器?WebGL的代码很有趣,在一个文件里,既有类似C的着色器语言,又有JavaScript语言。所以写这种代码生成3D图形是刺激的,同时也令人恼火。至少在未来几年里,编写着色器的语言中没有比GLSL(OpenGL着色语言)更好的了。因为图形硬件的处理器都都极端快,极端简单,所以编写的语言也要尽量简单,运行类似JavaScript这种动态语言基本上

11、不可能。有可能比在普通CPU上运行更慢。最好的WebGL书是什么?目前还没有专门讲WebGL的书,不过既然WebGL是从OpenGL ES继承过来,那么OpenGL ES的书也可以作为程序员的指导书籍。1:OpenGL ES 2.0 Programming Guide2:iPhone 3D Programming - Developing Graphical Applications with OpenGL ES为什么我的纹理无法工作?NPOT问题。当你使用长和宽非二次幂(NPOT)的纹理时,这些一般都不会工作,在WebGL上也是。例如,100x100像素的图像一般不会工作;128x128会工

12、作,类似的有128x512。从理论上讲4096x8192像素的纹理可以工作,但是你的客户可能会用完他们的图形卡上的记忆卡,尤其是当它们使用的是智能手机!翻转问题:如果您的纹理看颠倒了,他们很可能是.在一般情况下,人们往往用“T“轴坐标朝上,指定纹理的的三维模型.(t轴就是y轴)。这就是用“Y”轴指定使用在模型的顶点的位置轴。然而,由于历史原因,大多数图像格式是“Y“轴向下。这意味着你需要使用它们之前,围绕水平轴翻转图像。WebGL的第5课对这个做了更多解释。老式的ATI显卡驱动程序对于某些老旧的ATI显卡驱动,特别是与惠普电脑。您可能会发现,当您显示WebGL的页面的时候,图像不会出现,除非这

13、些网页包括如下JavaScript代码:gl.enable(gl.TEXTURE_2D)该代码实际上是无效的WebGL,gl.enable不应该接受gl.TEXTURE_2D。然而,在某些图形驱动程序中有一个bug,所以为了让页面显示,我们必须加上这行代码。如果你能,你最好的办法是更新驱动程序。我怎样把大型顶点网格表示在浏览器中呢?如果你有一个很巨大的3d模型,而且想把它从web服务器传递到你自己的WebGL网页。一个好的建议是使用json格式的编码。毕竟在WebGL网页内部,作为javascript来处理他们。所以为什么不在server上把它转换成那种格式,然后用xmlhttprequest

14、的方式来传送他呢?另外一种机制用到xml类似格式的就是COLLADA(这是一种面向交互式 3D 应用程序的基于 XML 的数字资产交换方案,使 3D 创作应用程序可以自由地交换数字资产而不损失信息 - 使多种DCC和3D处理软件包可以组合成强大的工具链管道)。但是解析xml格式并且把它转换成javascript的内部格式会比使用json慢。一些框架,例如O3D,支持一种在服务器端把COLLADA转换成JSON格式的服务器代理,便于客户使用。在WebGL里,units是以什么形式来定位顶点的?像素?可以是你想的任何东西。unit在在距离为z可能是10个像素宽,但在距离2z的相同的对象将是5个像素宽,因为近大远小的缘故。我们使用非特定的单位,使我们有一个统一的衡量标准。在实践中,你可以为unit指定任何的尺度。不如,在太空射击游戏中,你可以用一千米来代表一个unit,所以地球半径就是6371unit诸如此类。但是又如你写一个fps游戏,像quake,你的units可以单位可以是米。诸如此类。综上,只要你的模型有一个统一的unit标准,就可以了。我怎么确定我的WebGL代码可以适用所有地方呢?你自己试试去吧,从手机到电脑。我怎么来保护我的内容版权呢?你产品的价值应该用服务来体现,而不是用代码来体现。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号