【开发总结】—— BABYLON 项目开发必备系列
前言:在公司主要使用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 项目开发必备系列的更多相关文章
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- ASP.NET MVC开发:Web项目开发必备知识点
最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...
随机推荐
- Gym100623A Access Control Lists
Gym 100623A Access Control Lists 这个题很sb啊,就是去设置个交换机 我们可以给一个IP进行设置,也可以对一个网段就行设置,但是IP是优于网段的,比如样例的第一个 网段 ...
- 【转】UGUI文本字体颜色和大小等代码修改
http://blog.csdn.net/alayeshi/article/details/51842195 由于项目需求用UGUI在同个文本中显示出颜色和大小都不同的文字,我上网找个很久并没有见到相 ...
- Unity开发VR——Oculus Rif_将Oculus接入Unity
该文档基于 Unity2018.3.12f1 1. 搭建简单场景 2. 设置,选择 Edit - Project Setting(若已经勾选,就去掉在勾选一次) 完成该步骤之后,可以带上Oculus头 ...
- linux系统mysql密码修改脚本
编写了一个适用于阿里云linux系统 mysql密码修改脚本,使用阿里云提供的一键安装包配置后,如果account.log文件删除,并且忘记mysql密码时,可以通过脚本来重置mysql密码. 附:一 ...
- HTML 上标和下标
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- vs2017 出现“文件中的类都不能进行设计,因此未能为该文件显示设计器”问题处理
今天拷贝了以前的一个项目.打算出一个新版本. 但是拷贝了sln文件后,去除掉以前的项目,新增了一个 winfrom项目中 出现了:文件中的类都不能进行设计,因此未能为该文件显示设计器.错误 百度了一 ...
- MySQL常用查询方法
SELECT TIME(NOW()); -- 15:23:07 SELECT CURTIME(NOW());-- 15:23:07 SELECT ABS(-4); -- 4 SELECT 5 MOD ...
- LOJ#2084. 「NOI2016」网格
$n,m \leq 1e9$,$n*m$的网格中有$c \leq 1e5$个是黑的,其他是白的.问:使至少两个白的不连通,最少需要再把几个白的涂黑. 可以发现答案是-1,0,1,2啦.-1要么没白的, ...
- 【Reship】use of tangible T4 template engine
1.first of all 之前在 “使用T4模板生成代码 – 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “Multipl ...
- 【虚拟机】主机与VMware虚拟机通信(XP版)(转)
一.与主机共享ADSL链接/无线网络(虚拟机内可上网) 安装虚拟机后,在网络链接下除了本地链接外,会出现两个新的链接,分别是VMware Network Adapter VMnet1和VMware N ...


