Babylon.js 第29章 创建自定义网格

Babylon.js 第26 基本的3D网格形状 当平面的宽度或高度无法容纳整数个瓦片时,“切割”瓦片并使用部分瓦片填充平面。发生这种情况时,您可以安排零件拼贴的放置位置,可以在平面的一个边缘上,也可以均匀地在两个相对的边缘上。您可以通过在选项中设置。意味着最左边的瓦片列将是整个瓦片,而部分瓦片将在最右边的列中。​​ntal 以及您希望放置整个图块的位置来执行此操作。 阅读详情

 

目录

创建自定义网格 

1、创建

2、更新顶点

3、顶点法线


创建自定义网格 

1、创建

    let mat=new BABYLON.StandardMaterial('mat',scene)
    mat.diffuseTexture=new BABYLON.Texture('../img/9.jpg',scene)
    mat.backFaceCulling=false


    let customMesh=new BABYLON.Mesh('sustom',scene)
    //顶点数据里每3个元素组成一个vector3。indices是vector3的索引
    let positions=[0,0,0,5,0,0,2.5,2.5,0,0,0,-5,-5,0,-5,-2.5,-2.5,-5]
    let indices=[0,1,2,3,4,5]
    let normals=[]//空数组添加法线,法线方向,与光照有影响
    //Color3数组
    let colors=[1,0,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,0,1,0]
    //uv2维数组
    let uvs=[0,1,0,0,0,0,0,1,0,0,0,0]
    //添加法线
    BABYLON.VertexData.ComputeNormals(positions,indices,normals)
    let vertesData=new BABYLON.VertexData()
    vertesData.positions=positions
    vertesData.indices=indices
    //将法线分配给顶点数组
    vertesData.normals=normals
    //添加顶点颜色
    vertesData.colors=colors
    vertesData.uvs=uvs
    //第二个参数表示网格可更新
    vertesData.applyToMesh(customMesh,true)
    customMesh.material=mat

通常,平面的法线是与平面成直角的向量,ComputeNormal使用将位置、索引和法线的数组作为参数的方法在 vertexData 对象上计算法线。

2、更新顶点

 获取顶点各种数据

var positions = mesh.getVerticesData(BABYLON.VertexBuffer.PositionKind);
var normals = mesh.getVerticesData(BABYLON.VertexBuffer.NormalKind);
var colors = mesh.getVerticesData(BABYLON.VertexBuffer.ColorKind);
var uvs = mesh.getVerticesData(BABYLON.VertexBuffer.UVKind);

var indices = mesh.getIndices();

更新数据,确保网格已设置为在创建时可更新。然后这只是改变位置、法线、颜色和 uvs 数组中的任何数据以适应项目的问题,然后更新顶点数据

mesh.updateVerticesData(BABYLON.VertexBuffer.PositionKind, positions);
mesh.updateVerticesData(BABYLON.VertexBuffer.NormalKind, normals);
mesh.updateVerticesData(BABYLON.VertexBuffer.ColorKind, colors);
mesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs);

vertexData.applyToMesh(customMesh, true);

创建网格时,会平滑地创建每个面的法线以匹配预期的形状,例如球体。可以使用convertToFlatShadedMesh 使法线变平以使网格呈平坦着色。

sphere.convertToFlatShadedMesh()

还可以使用set方法添加数据

mesh.setVerticesData(BABYLON.VertexBuffer.ColorKind, colors);

示例:

	var sphere = BABYLON.MeshBuilder.CreateSphere("sphere",
        {diameter:10, updatable: true}, scene);

    var colors = sphere.getVerticesData(BABYLON.VertexBuffer.ColorKind);
    //如果网格颜色不存在
    if(!colors) {
        colors = [];
        var positions = sphere.getVerticesData(BABYLON.VertexBuffer.PositionKind);
        for(var p = 0; p < positions.length / 3; p++) {
            colors.push(Math.random(), Math.random(), Math.random(), 1);
        }
    }
    //设置网格颜色
    sphere.setVerticesData(BABYLON.VertexBuffer.ColorKind, colors);

3、顶点法线

网格的每个三角形面都包含三个顶点。除了一个位置,每个顶点还有另一个重要的向量3,称为法线。着色器代码使用这些顶点法线来计算网格的光照方式。与数学法线不同,没有必要将它们设置为直角,而对于诸如球体之类的弯曲形状,它们可能不是。在球体的情况下,它们被设置为球体表面的数学法线,而不是创建球体的网格平面的数学法线。

首先,顶点法线被计算为小平面的数学法线。然后,这取决于您是将小平面视为平面还是曲线的一部分。对于平面,顶点法线保留为数学法线。为了在光线下观察时增强曲线,其中三角形面共享具有相同位置的顶点,每个共享顶点法线被重新计算为共享顶点法线的数学法线的平均值。

共享法线意味着着色器生成一个看起来更圆的球体,因为顶点法线是球体表面的数学法线。

应用该功能converToFlatShadedMesh会显示构成球体的各个面。对于平面阴影球体,每个面的法线是面的数学法线。

 

 

 

zabbix监控深信服下一代防火墙配置 深信服下一代防火墙v8.0管理界面,zabbix,SNMP 阅读详情

相关推荐

Android HAL 架构详解,底层开发不再难

HAL Binder 这套机制牛在哪?性能:一次拷贝,快如闪电。规范:HIDL 让接口定义整齐划一,维护省心。兼容:版本管理做得好,新老设备都能跑。有了这套通信体系,HAL 就像打了通脉,上下贯通,硬件操作变得丝滑无比。通信机制搭好了桥,接下来 HAL 得真正把手伸到硬件上。这部分是 HAL 的 “最后一公里”,直接决定硬件能不能被用起来。HAL 的接口定义是整个体系的灵魂,它决定了上层和底层怎么 “说话”。

大模型大数据攻城狮的专栏 1586

Babylonjs学习笔记(八)——网格行为

babylonjs学习笔记

localhost 452

酒店预订数据集 CSV 11W+记录

此数据集包含城市酒店和度假酒店的 119390 个观测值。每个观察结果代表 2015 年 7 月 1 日至 2017 年 8 月 31 日期间的酒店预订,包括有效到达的预订和取消的预订。包含字段:hotel酒店类型 - 度假酒店或城市酒店。is_canceled取消预订的二进制指标(1 表示取消,0 否则)。lead_time预订日期和抵达日期之间的天数。arrival_date_year到达日期的年份。arrival_date_month到达日期的月份。arrival_date_week_number到达日期的周数。arrival_date_day_of_month到达日期的月份中的某一天。stays_in_weekend_nights客人入住的周末晚数(周六或周日)。stays_in_week_nights客人入住的周晚数(周一至周五)。adults预订的成人人数。children预订中的儿童人数。babies预订的婴儿人数。meal预订的餐食类型 - 例如,住宿加早餐 (BB)。country客人的原籍国。market_segment细分市场名称(例如,直接、公司)。distribution_channel预订分销渠道(例如,直接、企业)。is_repeated_guest如果访客是重复访客,则为二进制指标(1 表示重复,否则为 0)。previous_cancellations房客之前取消预订的次数。previous_bookings_not_canceled客人之前未取消的预订数量。reserved_room_type客人预订的房间类型。assigned_room_type分配给客人的房间类型。booking_changes对预订所做的更改次数。deposit_type客人支付的押金类型(例如,无押金)。agent预订旅行社的身份证件。company进行预订的公司/实体的 ID。days_in_waiting_list预订在等候名单上的天数。customer_type预订类型,例如临时预订、合同预订。adr(ADR平均每日租金,即每间付费入住客房的平均租金收入。required_car_parking_spaces客人需要的停车位数量。total_of_special_requests客人提出的特殊要求的数量。reservation_status当前预订状态(例如,退房)。reservation_status_date上次状态更新的日期。

babylon.js

babylon.js是什么? babylon.js是一个完整的JavaScript框架,用于构建HTML5,WebGL,WebVR和Web Audio的3D游戏和体验. 除了游戏用来在页面实现一些3D场景也是没问题的.官网 安装Babylon.js https://doc.babylonjs.com/babylon101/how_to_get 要安装最新版本的巴比伦,请使用: npm install --save babylonjs 这将安装babylonjsjavascript文件,还将包含TypeS

qq_40407998的博客 1万+

10 Babylonjs基础入门 鼠标拾取碰撞

在使用鼠标拾取对象时,主要困难是单击3D对象,而屏幕是平面2D显示。 让我们来看看我们如何通过这个枪支射击示例将鼠标位置转换到3D场景中: 上图最后显示效果。 如何实现? Babylon.js可以通过提供的功能让你实现这个功能。 首先,创建代表墙的平面和显示纹理效果的平面。我们必须要检测UI(用户界面)上面点击,触发事件或,使用pick函数来获取点击位置和场景中的关系的信息。 //绑定点击事件 ...

现在学习也不晚 2907

babylon.js入门基础【创建babylon场景需要什么】【绘制球】【绘制正方形】【绘制平面】

创建场景七大步

老段的CSDN的博客 1618

babylonjs 分部加载模型_基于babylon3D模型研究3D骨骼动画(1)

3D骨骼动画是实现较为复杂3D场景的重要技术,Babylon.js引擎内置了对骨骼动画的支持,但Babylon.js使用的骨骼动画的模型多是从3DsMax、Blender等3D建模工具转换而来,骨骼动画的具体生成方式被透明化。本文从babylon格式的3D模型文件入手,对骨骼动画数据的生成方式进行具体分析,并尝试建立一个简易的3D骨骼动画生成工具。一、模型文件分析我们从Babylon.js官方网站...

weixin_31812189的博客 1111

基于babylon3D模型研究3D骨骼动画(1)

  3D骨骼动画是实现较为复杂3D场景的重要技术,Babylon.js引擎内置了对骨骼动画的支持,但Babylon.js使用的骨骼动画的模型多是从3DsMax、Blender等3D建模工具转换而来,骨骼动画的具体生成方式被透明化。本文从babylon格式的3D模型文件入手,对骨骼动画数据的生成方式进行具体分析,并尝试建立一个简易的3D骨骼动画生成工具。 一、模型文件分析 我们从Babylon....

weixin_30439031的博客 1527

基于Babylon.js编写宇宙飞船模拟程序1——程序基础结构、物理引擎使用、三维罗盘

计划做一个宇宙飞船模拟程序,首先做一些技术准备。 可以访问https://ljzc002.github.io/test/Spacetest/HTML/PAGE/spacetestwp2.html查看测试场景,按住qe键可以左右倾斜相机。可以在https://github.com/ljzc002/ljzc002.github.io/tree/master/test/Spacetest查看程序代...

嘿嘿 2529

BabylonJS 6.0文档 Deep Dive 摄像机(二):摄像机碰撞

首先要做的是定义重力矢量,定义重力。Babylon.js的Scene类具有重力属性,可以应用于您之前在代码中定义的任何相机。这将沿指定的方向和速度移动摄影机(Vector3对象),除非摄影机的椭球体(参见下面的第2步)在checkCollisions设置为true的情况下与该方向上的另一个网格(如地面网格)发生碰撞。Scene设置重力属性摄像机开启重力属性在现实世界中,重力是一种向下施加的力,即沿Y轴的负方向施加的力。在地球上,这一力大约为9.81m/s²。

Arwind的专栏 1544

WebGL场景的两种地面构造方法

总述:大部分3D编程都涉及到地面元素,在场景中我们使用地面作为其他物体的承载基础,同时也用地面限制场景使用者的移动范围,还可以通过设置地块的属性为场景的不同位置设置对应的计算规则。本文在WebGL平台上借助Babylon.js库探索并实现了两种地面构造方法,除了两种确定的构造方法外,本文还包含了对一些其他选择的探讨和一些对电子游戏艺术的看法。建议在阅读本文前,先学习3D编程入门知识和Babylon...

weixin_30292745的博客 590

基于Babylon.js编写简单的骨骼动画生成器

  使用骨骼动画技术可以将网格的顶点分配给若干骨头,通过给骨头设定关键帧和父子关系,可以赋予网格高度动态并具有传递性的变形 效果。这里结合之前的相关研究在网页端使用JavaScript实现了一个简单的骨骼动画编辑和模型生成工具。     一、显示效果: 1、访问https://ljzc002.github.io/Bones/HTML/CstestSpaceCraft2.html查看测试页面: ...

weixin_30872867的博客 1020

使用着色器在WebGL3D场景中呈现行星表面地形

实验目的:按照一定规律生成类地行星地表地形区块,并用合理的方式将地形块显示出来 涉及知识:Babylon.js引擎应用、着色器编程、正态分布、数据处理、canvas像素操作 github地址:https://github.com/ljzc002/ljzc002.github.io/tree/master/DataWar 一、在球体网格上显示纹理的传统方法: 1、常见的一种星球表面绘制方法是...

weixin_30338497的博客 1481

结合WebSocket编写WebGL综合场景示例

结合WebSocket编写WebGL综合场景示例 在WebGL场景中导入多个Babylon骨骼模型,在局域网用WebSocket实现多用户交互控制。 首先是场景截图: 上图在场景中导入一个Babylon骨骼模型,使用asdw、空格、鼠标控制加速度移动,在移动时播放骨骼动画。 上图在场景中加入更多的骨骼模型(兔子),兔子感知到人类接近后会加速远离人类。 上图,一个局域网中的新玩...

嘿嘿 700

在WebGL场景中使用2DA-寻路

这篇文将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点。读者需要预先对WebGL和Babylonjs知识有一些了解,可以参考我录制的WebGL入门视频教程和翻译的官方入门文档,当然也可以用自己喜欢的其他方式来学习。   文主要分成如下几部分:   1、自定义地面网格与寻路矩阵   2、生成Babylon格式3D模型

zhanglao33的博客 1191

在WebGL场景中使用2DA*寻路

  这篇文将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点。读者需要预先对WebGL和Babylonjs知识有一些了解,可以参考我录制的WebGL入门视频教程和翻译的官方入门文档,当然也可以用自己喜欢的其他方式来学习。   文主要分成如下几部分:   1、自定义地面网格与寻路矩阵   2、生成Babylon...

weixin_30758821的博客 379

网页端3D编程小实验-一种多人自走棋游戏原型

然后在射弹属性区上传一张该角色的射弹图片,例如投石机上传一张石头图片、魔法师上传一张火焰图片等,这里需要注意两点:1、为了简化编程,近战单位的攻击也以射程较短的射弹表示,例如发射一把剑或刀,2、将射弹图片的背景设为透明可以让射弹更好的融入环境,对于ai生成的图片,可以先用图像处理工具去掉背景,对于纯色背景的图片,可使用tool目录下的ChangeOneColor2.html脚本将指定颜色替换为透明色。//这个方法是用来读xml文件的,prop读不了!//不同端的agentIndex可能是不同的!

bQTn7Fc2p的博客 202

前端周刊第三十九期

前端周刊发表每周前端技术相关的大事件、文教程、一些框架的版本更新、以及代码和工具。每周定期发表,欢迎大家关注、转载。如果外链不能访问,关注公众号**「前端每周看」**,里面有解决办法。

「 虚幻私塾」 203

4月23号软件更新资讯合集.....

smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的 MQTT Broker 服务。smart-mqtt 的独特优势在于大量设备接入的情况下,仍能保持低延迟和高吞吐量,满足物联网领域严苛的实时性需求。同时,smart-mqtt 为了最大限度地节省硬件成本,采用了高度优化的资源管理策略,降低了系统运行时的 CPU 和内存占用,使企业在保持高性能的同时,大幅降低运维成本。

2301_76364917的博客 572

AI生成3D模型:从手机拍照到可编辑三维资产的全流程解析

3D建模正经历范式转移——不再依赖专业软件手动构建几何体,而是通过多视角图像让AI反推空间结构,实现‘所见即所得’的三维数字化。其核心原理是神经渲染,即利用深度学习建立图像像素与三维辐射场之间的映射关系,典型技术包括NeRF、3D Gaussian Splatting和隐式网格。这种能力大幅降低3D内容生产门槛,使产品展示、电商交互、工业设计协作、文化遗产存档等场景获得高性价比的轻量化三维资产。尤其适合需快速获取可嵌入网页、Unity、Blender或用于3D打印的.glb/.fbx/.stl格式模型的非专

aikenqiu5098的博客 432

初学babylonjs

【代码】初学babylonjs

PG5的博客 502
上一篇: Babylon.js 第28章 多面体
下一篇: Babylon.js 第30章 网格变换
Jake N
博客等级 码龄4年 27粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值