【Babylonjs】认识基本元素

二、认识基本元素

    每个形状都有它自己的名字,例如立方体(box 或者 cuboid)、球体(sphere)、圆柱体(cylinder)、圆锥体(cone)、规则多边行(regular polygons)、平面(plane)以及特殊的水平面——地面(ground)。还包括一些形状例如圆环(torus)、圆环结(torus knot)以及多面体(polyhedra)。等到你学习了下一节的内容就可以通过数据集和参数形成的形状创建没有被定义名称的形状。这些被称为参数形状。

MeshBuilder 方法

    通常来说创建一个形状使用如下代码:

var shape = BABYLON.MeshBuilder.CreateShape(name,options,scene);

options选项能够使你设定形状的大小,是否实时更新等。如下表:

立方体(Box)

var box = BABYLON.MeshBuilder.CreateBox("box", {}, scene); 
var myBox = BABYLON.MeshBuilder.CreateBox("myBox", {height: 5, width: 2, depth: 0.5}, scene);
选项含义默认值
size(number) 立方体的大小1
height(number) 高度,覆盖大小属性size
width(number) 宽度,覆盖大小属性size
depth(number) 深度,覆盖大小属性size
faceColors(Color4[]) 数组里有6个颜色,每一个面对应一个Color4(1, 1, 1, 1) for each side
faceUV(Vector4[]) 数组里有6个向量,每一个面对应一个UVs(0, 0, 1, 1) for each side
updatable(boolean) 是否更新,true则形状不停更新false
sideOrientation(number)排列方向DEFAULTSIDE

*sideOrientation和Threejs的side类似,为0的时候正面隐藏只能看到形状的反面,为1时看到的是正面,为2时为双面显示。

尝试一下

球体(Sphere)

var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", {}, scene); 
var mySphere = BABYLON.MeshBuilder.CreateSphere("mySphere", {diameter: 2, diameterX: 3}, scene);
选项含义默认值
segments(number) 水平分段的数值32
diameter(number) 直径1
diameterX(number) X轴的直径,覆盖直径属性diameter
diameterY(number) Y轴的直径,覆盖直径属性diameter
diameterZ(number) Z轴的直径,覆盖直径属性diameter
arc(number) 周长(纬度)在0和1之间的比率1
slice(number) 高度(经度)在0和1之间的比率1
updatable(boolean) 是否更新,true则形状不停更新false
sideOrientation(number) 排列方向
DEFAULTSIDE

尝试一下

平面(Plane)

var plane = BABYLON.MeshBuilder.CreatePlane("plane", {}, scene); 
var myPlane = BABYLON.MeshBuilder.CreatePlane("myPlane", {width: 5, height: 2}, scene);
选项含义默认值
size(number) 平面的大小1
width(number) 宽度size
height(number) 高度size
updatable(boolean)是否更新,true则形状不停跟新false
sideOrientation(number) 排列方向DEFAULTSIDE
frontUVs(Vector4[]) 只有在sideOrientation为BABYLON.Mesh.DOUBLESIDE的时候生效,用于定义前面的面的UV方向Vector4(0,0, 1,1)
backUVs(Vector4[]) 只有在sideOrientation为BABYLON.Mesh.DOUBLESIDE的时候生效,用于定义后面的面的UV方向Vector4(0,0, 1,1)
sourcePlane(Plane) 形状将会被转换为源平面(maths) null

尝试一下

sourcePlane 对平面来说是一个唯一的选项,它提供一种排列摆放位置的方法,目前它的排列定向为向量vector(0,0,1)。如果你希望方向是向量vector(0,-1,1),那么你就创建一个源平面。

var sourcePlane = new BABYLON.Plane(0, -1, 1, 0);
sourcePlane.normalize();

这就创建了一个数学平面,作为方向源。第四个参数是在方向向量方向移动的距离。

尝试一下

地面(Ground)

var ground = BABYLON.MeshBuilder.CreateGround("ground", {}, scene); 
var myGround = BABYLON.MeshBuilder.CreateGround("myGround", {width: 6, height: 4, subdivsions: 4}, scene);
选项含义默认值
width(number) 宽度1
height(number) 高度1
updatable(boolean) 是否更新false
subdivisions(number) 平方细分数1

尝试一下

可以通过heightMap使用CreateGroundFromHeightMap创造一个形成起伏的地面而不是一个平坦的地面。

面的颜色及UV(Face Colors or UV)

只在数量有限的拥有不同的面的形状可用,例如立方体(Box)而球体(shpere)不可用。这个属性允许你去给每一个面赋予独立的颜色以及图片。

是否更新(Updatable)

若将该属性设置为true,则改变网格的每个顶点相关的数据和改变形状的网格都会在场景里的更新。

排列顺序(Side Orientation)

这个选项被用来描述图形的每一个面如何被观察。

选项有四个可能的值:

  • BABYLON.Mesh.FRONTSIDE, //前面

  • BABYLON.Mesh.BACKSIDE,//后面

  • BABYLON.Mesh.DOUBLESIDE,//双面

  • BABYLON.Mesh.DEFAULT//默认值,等同于前面

在案例中,你可以通过拖动你的场景旋转平面的朝向来发现各个属性的差别。

尝试一下

前后面的UV(Front and Back UV)

当一个形状有sideOrientation选项,它被设置为双面时才有可能前后来显示不同的图像。


第1篇 系统开发基础   包括第1章三维图形世界、第2章OpenGL概述和第3章Oracle与 OCI技术及编程基础。   第1章 介绍了计算机三维图形技术的发展、科学计算可视化技术、三维可视化工程设计的基本概念和发展现状。   第2章 主要对OpenGL的基本概念、OpenGL编程基础和在Visual C++环境下OpenGL基本程序框架的建立进行了讲解,并给出了一个简单的旋转立方体程序示例。通过这一章,使读者对OpenGL有初步的概念和了解,对于纹理、显示列表等更深入的编程,我们将通过后续章节进行更详细的讲解和学习。   第3章 主要对Oracle数据库及其特点进行简要的介绍和说明。以Oracle 9i为例,介绍了Oracle数据库的安装步骤和Oracle支持的数据类型。在此基础上,介绍了ADO、Pro*C/C++和OCI三个主要Oracle编程接口,对它们的各自功能和特点进行了详细说明,从功能方面、性能方面、开发难度方面进行了详细分析和比较。重点介绍OCI编程基础、OCI的数据结构、OCI程序的基本结构、OCI执行的步骤,最后给出了在Visual C++6.0环境下开发OCI应用程序的示例。   第2篇 大规模地形三维可视化系统设计与实现   包括第4章地形三维可视化系统框架与OCI类模块设计、第5章地形三维可视化系统的地形渲染实现和第6章地形三维可视化系统项目管理与辅助功能设计。   第4章 在第2章的基础上,完成了基于OpenGL的地形三维可视化系统程序框架的建立,为后续的功能模块开发提供了基础平台;在第3章的基础上,设计了OCI公共类,将所有与OCI有关的数据库操作、数据读取等功能函数实现全部封装在该类中,并定义了公共类的全局变量myOci。   第5章 本章对地形三维可视化进行了基本概述,介绍了目前地形三维可视化的主要算法。主要介绍了海量地形与影像纹理数据的常用获取方法,给出了海量地形自分块与影像纹理分块原则和程序实现,以及地形与影像子块调度的程序实现,在此基础上实现了地形的三维可视化;还介绍了真三维立体的实现算法和数学模型,在此基础上给出了基于OpenGL的真三维立体的程序实现。   第6章 主要讲解了新建项目、打开项目、背景天空的绘制、绘图模式控制的实现方法和程序设计。介绍了基于OpenGL深度缓存的二维屏幕坐标向三维空间坐标的转换算法,实现了对三维空间坐标和空间距离查询,以及查询标识设置的程序设计;最后讲解了基于键盘和鼠标联合控制的三维场景照相机程序模块的实现,实现三维场景的前、后、左、右移动和任意方向的旋转。   第3篇 线路三维可视化系统设计与实现   包括第7章三维交互技术与三维线路数据结构、第8章三维线路设计实现、第9章道路整体三维建模和第10章三维漫游的实现。   第7章 主要对三维交互环境进行了介绍,详细讲解了正射投影模式的实现、正射投影模式下场景控制方法和程序设计,以及透视投影模式的实现方法;还讲解了正射投影模式和透视投影模式下三维地面坐标的获取原理、方法,在此基础上,设计了边坡数据结构、桥梁数据结构、隧道数据结构、水沟数据结构及线路数据结构,为实现三维线路设计做好了前期准备。   第8章 主要对线路方案的主要参数设计方法和程序实现、设计交点信息输入实现、线路中心线定位方法、设计方案的保存、平面方案的自动生成和程序设计、纵断面设计模块的实现、边坡模型的生成算法、线路路基三维建模方法和实现、隧道三维建模和参数控制、桥梁三维建模和参数控制的程序设计进行了详细讲解。   第9章 主要讲解了道路整体三维模型实现,对其中的线路封闭区域确定与分割算法、地形块综合数据点计算、分块TIN模型的构网实现、封闭区域内数据点的剔除、整体构网的程序实现都进行了详细说明;在纹理管理部分,详细讲解了边坡纹理、路肩纹理、桥梁护坡面纹理、隧道内墙纹理、隧道洞门纹理的程序设计和实现。   第10章 从多个方面对三维漫游的基本概念、程序实现、参数调整和控制进行了讲解,帮助读者学会在三维可视化系统中三维漫游模块的程序设计方法;对飞行路径的基本概念、设置方法、插值算法、保存和打开的程序设计,沿飞行路径实现三维漫游的程序设计,沿线路方案漫游的固定高度和相对高度两种模式的程序设计,三维漫游控制和调整的程序设计,以及三维漫游的相关计算都进行了详细的讲解,每一部分都给出了完整的程序代码。   第4篇 线路三维可视化系统辅助功能实现   包括第11章显示模式控制及实现、第12章3D模型载入与应用、第13章系统输出接口与动画录制实现和第14章系统简介与运行实例。   第11章 本章主要对双目立体方式、正射投影方式和透视投影方式的显示模型模式控制和实现、时钟指北针的程序设计和实现、缩略图的实现方法和程序设计进行
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值