前言:在公司主要使用Babylon.js作为前端引擎,我自己在开发中总结到基本上每一个新项目都会需要这些基本设置。


一、ios兼容:解决镜面反射

 

如果不加offline,材质中有镜面反射,苹果手机都会打不开项目

//ios兼容,解决镜面反射
var offline;
if (os.isPhone) {
offline = false
} else {
offline = true
} var demo = {
scene: 'MI8',
binary: true,
offline: offline,

二、提高支持硬件的质量(在查看器中应该是动态的)

var scale = Math.max(1 / (window.devicePixelRatio || 2));
engine.setHardwareScalingLevel(scale);

三、如果模型把材质都赋给了blank材质球,需手动赋材质

在JSON中分出两套材质,实现调试后即时保存

var mats = {};
function initMaterial() {
//分材质
scene.meshes.forEach(function (mesh) {
if (mesh.material && mesh.material.name == "blank") {
var mat1 = new BABYLON.StandardMaterial(mesh.name + 'mat', scene);
var mat2 = new BABYLON.StandardMaterial(mesh.name + 'mat_2', scene); if (!mats[mesh.name]) {
mats[mesh.name] = {}
}
}
if (mesh.material && mesh.material.diffuseTexture) {
var text = mesh.material.diffuseTexture;
mesh.material.opacityTexture = text;
mesh.material.backFaceCulling = false;
}
mesh.isPickable = true;
}); // if (os.isPc) {
// openDebug();
// } //initSceneByJSON(json);

遍历获取两套材质一定要在开启调试链接,初始化json后:

for (key in mats) {
mats[key].mat1 = scene.getMaterialByName(key + "mat");
mats[key].mat2 = scene.getMaterialByName(key + "mat_2");
//默认显示的材质
scene.getMeshByName(key).material = scene.getMaterialByName(key + "mat_2");
}

按钮切换分别为:

for (key in mats) {
scene.getMeshByName(key).material = scene.getMaterialByName(key + "mat");
//console.log(scene.getMeshByName(key).material.name)
}
for (key in mats) {
scene.getMeshByName(key).material = scene.getMaterialByName(key + "mat_2");
//console.log(scene.getMeshByName(key).material.name)
}

四、初始化场景、材质等资源

function initHUA(){
function initScene(){
//透明背景
scene.clearColor = new BABYLON.Color4(0, 0, 0, 0); //全部材质可pick
scene.meshes.forEach(function(mesh){
mesh.isPickable = true;
if(mesh.animations.length){
scene.beginAnimation(mesh, 0, 0, false)
}
}); //isready = true;
} function initCamera(){
window.camera = new BABYLON.ArcRotateCamera("Camera",0 ,0.8 ,0, new BABYLON.Vector3(0,0,0),scene); //限制范围
camera.lowerBetaLimit = 0.95;
camera.upperBetaLimit = 1.25;
//camera.lowerAlphaLimit = -Math.PI / 6;
//camera.upperAlphaLimit = Math.PI / 6;
camera.lowerRadiusLimit = 45;
camera.upperRadiusLimit = 65; //变焦速度
camera.wheelPrecision = 1;
camera.pinchPrecision = 1;
camera.zoomOnFactor = 50; ////调整参数
camera.radius = 52;
camera.alpha = 0;
camera.beta = 1.25;
camera.targetScreenOffset.y = -10;
camera.inertia = 0.85;
camera.useAutoRotationBehavior = false; scene.activeCamera = camera;
camera.attachControl(canvas,true);
} function initLight(){
var hem = new BABYLON.HemisphericLight("HemiLight", new BABYLON.Vector3(0, 1, 0),scene);
hem.intensity = 0.3; //创建缓冲函数 - Bezier曲线自定义缓冲
//var easingFunction = new BABYLON.BezierCurveEase(.5,.21,.06,.98);
}

五、微信钉钉兼容性问题

  • 微信中Dom元素全部需要放在canvas上面,放在下面会被场景挡住,设置z-index也没用
  • 钉钉中的动画全部需要兼容-webkit前缀,因为钉钉内嵌chrome
  • 注意@keyframes加前缀的形式是:@-webkit-keyframes

六、微信分享

<script type="text/javascript">
try{
wxShareConfig({
shareTitle: "小米8",
shareLink: window.location.href,
shareImgUrl: "https://forreall.cn/3ds/app/MI8/img/logo.png",
shareDesc: "8周年旗舰手机"
});
}catch(e){
}
</script>

七、数据/事件统计

//点击事件统计
try {
Forreall3d.trackEvent('_trackEvent', '小米8', '点
击', '切换普通版');
} catch (e) {
}

注意:点击事件有效时才统计一次,无效点击不统计

//旋转事件统计
Forreall3d.eventDetect("花儿送给你");

八、数字型loading

<script src="../../js/loading.js"></script>

Fn1要放在demo前:

function fn1(num){
$('.loadwrap-first .heart').html(num);
}

Fn2和loading放在最后:

//loading
function fn2(){
$(".loadwrap-first").fadeOut();
}
loading(scene,fn1,fn2);

版权声明:本文原创,非本人允许不得转载 

【开发总结】—— BABYLON 项目开发必备系列的更多相关文章

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  10. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

随机推荐

  1. Leetcode 556.下一个更大元素III

    下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...

  2. 平时代码中不符合python风格的举例

    良好的代码风格体现出自己的专业,良好的代码风格,方便同事之间协作. 下面举例讲讲自己在代码中不符合python风格的一些情况,方便自己写出优雅的代码. 段落之间空两行 很长的参数用括号连接但是不要超过 ...

  3. 异常为"当IDENTITY_INSERT设置为OFF时" 解决办法

    当 IDENTITY_INSERT 设置为 OFF 时,不能向表"A" 中的标识列插入显示值. 一般来说是自增ID造成的. 因此可以在数据库insert语句前加上 SET iden ...

  4. iOS-@inerface的11条规范写法

    总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件. 1.读写权限 1.1实例变量的@public,@protected,@priv ...

  5. 【bzoj4390】[Usaco2015 dec]Max Flow LCA

    题目描述 Farmer John has installed a new system of N−1 pipes to transport milk between the N stalls in h ...

  6. [luoguP2587] [ZJOI2008]泡泡堂(贪心)

    传送门 贪心,很像田忌赛马那样,但是因为有平局加一分导致那样的贪心不好处理. 先将两个数组从小到大排序. 比较a最大和b最大,如果a比b大,那么直接赢掉 否则 比较a最小和b最小,如果a比b大,那么直 ...

  7. 洛谷 [P2577] 午餐

    DP + 贪心 我们发现,如果只有一个窗口,贪心即可解决,吃饭时间长的人一定要先打饭 有两个窗口的时候,这条性质依然满足,但是两个窗口如何分配,需要 01 背包 #include <iostre ...

  8. 用 config drive 配置网络

    上一节最后问了大家一个问题:如果 subnet 没有开 DHCP,会是怎样一个情况? 在其他条件不变的情况下,cloud-init 依然会完成那 3 个步骤,也就是说网卡还是会被配置成 dhcp 模式 ...

  9. COGS 2485. [HZOI 2016]从零开始的序列

    2485. [HZOI 2016]从零开始的序列 ★★   输入文件:sky_seq.in   输出文件:sky_seq.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] ...

  10. LOJ#2083. 「NOI2016」优秀的拆分

    $n \leq 30000$的字符串,问其所有子串的所有AABB形式的拆分有多少种.$t \leq 10$组询问. $n^3$过80,$n^2$过95,鬼去写正解.. $n^2$:先枚举一次算每个位置 ...