当前位置:首页 » 网页前端 » osgweb开发
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

osgweb开发

发布时间: 2023-07-26 21:01:46

㈠ 如何在Web上直接浏览大规模OSGB格式倾斜模型(二):转换OSGB

欢迎关注公号【 三维网格3D 】,第一时间获取最新文章

上一篇( 如何在Web上直接浏览大规模OSGB格式倾斜模型(一):解析OSGB )已经贴出了解析结果,让我们对OSGB倾斜模型文件内部结构有了比较清晰的认识,本篇我们将解析结果转成three.js对象,并实现单个模型的显示。

为什么转成three.js对象

从解析结果看,Osg对象的节点关系用three.js对象表达更容易,转换结果可以直接用three.js显示,通过我们团队的Cesium和three.js融合方案,可以轻松将成果用于Cesium开发的项目,既可以单独使用,又可以拥有GIS能力。

需要转换的Osg类型

解析得到的Osg对象,Type属性指示对象的类型,我们只是要转换倾斜摄影模型文件的Osg对象,而不是做一个通用的转换工具,所以先将类型做一下分类,只转换目前所用测试数据(100多G的测试数据)已知的类型。

PS:我们团队内部使用的版本,经过一年多的应用和改进,支持了更多类型的转换,填了许多坑,而且支持osgb、osgt、osg、osgjs四种格式文件,加载速度和健壮性都得到保障。欢迎咨询~

节点类

osg::Node

osg::Geode

osg::Group

osg::LOD

osg::PagedLOD

osg::MatrixTransform

几何类

osg::Geometry

osg::OsgArray

材质类

osg::StateSet

osg::Material

osg::StateAttribute

osg::Texture

osg::Texture2D

osg::Image

节点类主要考虑osg::MatrixTransform,因为这个节点主要的信息就是变换参数,会影响模型的位置、旋转、缩放等。

接下来我们着重介绍转换几何和材质这两类,LOD和PagedLOD参数不多,而且都是调度相关的,我们放在下一篇一起介绍。

转换几何对象

几何数据存储在Osg::Geometry,包含索引属性PrimitiveSetList、位置坐标属性VertexArray、纹理坐标属性TexCoordArray。我们将其转换为THREE.BufferGeometry。

varbufferGeometry=newTHREE.BufferGeometry();

顶点属性转换

顶点属性值是一个二维数组,我们直接调用flat方法,转为一维数组即可。

varpositions=newFloat32Array(osgGeometry.VertexArray.flat());

varuvs=newFloat32Array(osgGeometry.TexCoordArray.flat());

bufferGeometry.setAttribute('position',newTHREE.BufferAttribute(positions,3));

bufferGeometry.setAttribute('uv',newTHREE.BufferAttribute(uvs,2));

索引转换

索引类型有两种,有value指定,这里我们只对索引类型为4的情况(即绘图最小单元为四边形)进行特殊处理,其余的默认最小绘制单元为三角形。

varprimitiveSet=osgGeometry.PrimitiveSetList[0]

varindices=primitiveSet.data;

if(primitiveSet.value==4) {

letnewIndices=[];

for(leti=0; i<indices.length; i+=4) {

leti0=indices[i],

i1=indices[i+1],

i2=indices[i+2],

i3=indices[i+3];

newIndices.push(

i0, i1, i3,

i1, i2, i3

);

}

indices=newIndices;

}

bufferGeometry.setIndex(indices);

转换材质对象

倾斜摄影模型的材质最重要的就是贴图,作为原理介绍,我们不处理其他材质参数,直取贴图即可,当然工程应用上我们还是需要处理一些情况,保证其可用、可靠、健壮。

材质对象存储在Osg::Geometry的StateSet属性,该属性类型为Osg::StateSet,而我们要的贴图存储在Osg::StateSet的TextureAttributeList属性,一般就一张图。

倾斜模型已经包含了光影信息,为此我们将材质转为THREE.MeshBasicMaterial。

varmaterial=newTHREE.MeshBasicMaterial({

side:THREE.DoubleSide

});

处理贴图

贴图一般是jpg或者png格式,我们这里只处理这两种格式。需要注意的是图片数据为Uint8Array类型,我们需要先转为Blob,然后通过URL.createObjectURL创建url,最后使用THREE.TextureLoader加载。

varosgStateSet=osgGeometry.StateSet;

varosgImage=osgStateSet.TextureAttributeList[0].value.StateAttribute.Image

varfileName=osgImage.Name;

constisJPEG=fileName.search(/\.jpe?g($|\?)/i)>0

constisPNG=fileName.search(/\.png($|\?)/i)>0

if(!isPNG&&!isJPEG)return;

varmimeType=isPNG?'image/png':'image/jpeg';

varimageUri=newBlob([osgImage.Data], { type:mimeType });

imageUri=URL.createObjectURL(imageUri)

vartexture=newTHREE.TextureLoader().load(imageUri, ()=>{

texture.needsUpdate=true

})

创建网格

最后,使用转换好的几何体和材质创建模型网格。这里要注意,倾斜摄影模型是z轴朝上(z-up),而three.js渲染是y轴朝上(y-up),所以还需将网格绕x轴旋转y-90°才得到正常的渲染效果。

varmesh=newTHREE.Mesh(geometry, material);

mesh.rotation.x=-Math.PI/2

转换结果

显示效果

额,看起来并没有那么好看~毕竟这是单个瓦片最不清晰的那层,简化到不能看了。

下一篇,我们将主要介绍如果实现PagedLOD,来加载大规模倾斜摄影模型,敬请期待

欢迎关注公号【 三维网格3D 】,第一时间获取最新文章

㈡ 关于WebGL的基本现状

WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。

显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等。

WebGL 的最大优势就是能通过网页做到快速传播,用酷炫的图形体验达到营销宣传等目的。

WebGL基本现状

WebGL 1.0 基本有98%的设备支持率,而 WebGL 2.0 有大概49%的设备支持率,并逐步在上升。

其中 WebGL 2.0 的重要特性有

WebAssembly方面:许多 C3D 引擎都开始涉及这块领域。比如 oryol,一个轻量级的 C 框架。其中物理模拟的部分通过 Webassembly 的方式去做,在 web 上做了个布料模拟的 demo。当然 Unity 和 Unreal 也都推出了自己基于 Webassembly 的 demo:

  • Unity:两个 demo,分别为:tank,webgl_linear。

  • Unreal:EpicZenGarden。

  • WebGL 研发中的新特性

    英特尔的先进网络科技团队对 WebGL 的生态系统做出了许多贡献,因此新特性部分主要由他们来展示。

    WebGL 2.0 Compute

  • 研发描述:在 WebGL 实现 OpenGL ES 3.1 的功能,主要是 Compute Shader!

  • 研发状态:

  • 对于 OpenGL 和 D3D 后端 Compute Shader 都基本完成,通过在 Chrome 中设置 flag enable-webgl2-compute-context 可以使用。

  • 基于 Compute Shader 的 Tensorflow.js 基本可以运行。

  • 研发计划:

  • 在今年末实现所有 Compute Shader 的特性。

  • 在 Emscripten 中支持 WebGL 2.0。

  • 将 Native dEQP ES 3.1 的样例移植到Web端。

  • 根据需求实现 OpenGL ES 3.1的其他特性

  • 常见的Web开发软件

    基于 WEBGL 的 3D:three.js , osgjs
    其中 three.js 最火爆,是纯JS包osg 还有对应的 C++ 跟 .NET 包, OSGJS 并不是 OSG 的重点;

    专注于 WEB 3D GIS 的 WEBGL:osmstreet、openwebglobe、readymap这个是做 3D 城市规划的;

    基于 IE ACTIVEX OCX 的 3D:unity3D , 很火, 做WEB游戏,做 anroid 游戏, IE CHORME 都可以google earth 学习成本低;

    基于 AS3 的 3D:Away3d、FLASH 正在走下坡;

    下方

    运营:weikashouji

㈢ 常见的Web3D开发软件工具

你可以先去【绘学霸】网站找“3d建模”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-1732515186659462987

想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。

自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-1732515186659462987

在“3d建模”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。

大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html