• 【DQ冰淇淋】—— Babylon 冰淇淋三维互动营销项目总结


    前言:在学习过Babylon.js基础之后,我上手的第一个网页端3D效果制作项目就是‘DQ冰淇淋’。这个小项目应用到了Babylon最基础的知识,既可以选味道,选点心,也可以旋转、倒置冰淇淋,互动起来十分有趣。项目地址:DQ冰淇淋


     

    草莓味搭配奥利奥 榴莲味搭配奥利奥华夫脆 草莓味搭配奥利奥-倒杯 

     

    一、开启http-server服务

    在根目录下开启服务: $ http-server

    Starting up http-server, serving ./

    Available on:

      http://10.0.2.61:8080

      http://127.0.0.1:8080

    Hit CTRL-C to stop the server

     

    二、匹配不同客户端

    var os = function(){
        var ua = navigator.userAgent,
            isWindowsPhone = /(?:Windows Phone)/.test(ua),
            isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone,
            isAndroid = /(?:Android)/.test(ua),
            isFireFox = /(?:Firefox)/.test(ua),
            isChrome = /(?:Chrome|CriOS)/.test(ua),
            isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua)),
            isPhone = /(?:iPhone)/.test(ua) && !isTablet,
            isPc = !isPhone && !isAndroid && !isSymbian;
        return {
            isTablet: isTablet,
            isPhone: isPhone,
            isAndroid: isAndroid,
            isPc: isPc
        };
    }();

     

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

    1、初始化场景:设置背景透明,全部材质可pick

    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;
     }

    2、初始化相机:调整参数,限制范围,设置变焦速度

    function initCamera(){
        camera = new BABYLON.ArcRotateCamera("Camera",0 ,0.8 ,0, new BABYLON.Vector3(0,20,0),scene);
    
        //限制范围
        camera.maxZ = 50000;
        camera.lowerBetaLimit = 0.35;
        camera.upperBetaLimit = 1.543;
    
        //变焦速度
        camera.wheelPrecision = 1;
        camera.pinchPrecision = 1;
        camera.zoomOnFactor = 50;
    
        //调整参数
        camera.radius = 100;
        camera.alpha = Math.PI / 2;
        camera.beta = 1.436;
        camera.targetScreenOffset.y = 3;
        camera.inertia = 0.85;
    
        scene.activeCamera = camera;
        camera.attachControl(canvas,true);
    }

    3、初始化灯光:根据模型需求设置半球灯光HemisphericLight

    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);
    }

    4、初始化材质:为模型材质命名,设置透明度,等待开启调试链接

    function initMaterial(){
        scene.getMeshByName("TA").material = new BABYLON.StandardMaterial("tamat",scene);
        scene.getMeshByName("BZ").material = new BABYLON.StandardMaterial("bzmat",scene);
        scene.getMeshByName("SZ").material = new BABYLON.StandardMaterial("SZmat",scene);
    
        var ala = scene.getMeshByName("ALA");
        var zs = scene.getMeshByName("ZS");
        var hf = scene.getMeshByName("HF");
        var bql = scene.getMeshByName("BQL");
    
        zs.visibility = 0;
        hf.visibility = 0;
    
        //开启联机调试
        // if (os.isPc) {
        //     openDebug();
        // }
    }

    5、初始化json:调试工具生成的json文件定义皮肤,覆盖上面定义的材质纹理  

    var json = {
                    "lights": {
                        "Default light": {
                            "intensity": 1,
                            "diffuse": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "specular": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "groundColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "direction": {
                                "x": 0,
                                "y": 1,
                                "z": 0
                            }
                        },
                        "light2": {
                            "intensity": 0.3,
                            "diffuse": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "specular": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "groundColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "direction": {
                                "x": 0,
                                "y": 1,
                                "z": 0
                            }
                        }
                    },
                    "materials": {
                        "lambert2": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 0.2784313725490196,
                                "g": 0.12941176470588237,
                                "b": 0
                            },
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularPower": 2.56,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 0,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": true,
                            "diffuseTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "diffLevel": 1,
                            "diffUS": 1,
                            "diffVS": 1,
                            "diffIndex": 0,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "lambert1": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 0.8588235294117647,
                                "g": 0.8588235294117647,
                                "b": 0.8588235294117647
                            },
                            "emissiveColor": {
                                "r": 0.3607843137254902,
                                "g": 0.3607843137254902,
                                "b": 0.3607843137254902
                            },
                            "specularColor": {
                                "r": 0.7019607843137254,
                                "g": 0.7019607843137254,
                                "b": 0.7019607843137254
                            },
                            "specularPower": 100,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0.38823529411764707,
                                "g": 0.38823529411764707,
                                "b": 0.38823529411764707
                            },
                            "metallic": 0.1,
                            "roughness": 0,
                            "indexOfRefraction": 2.302,
                            "useSpecularOverAlpha": false,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "lambert4": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 1,
                                "g": 0.9333333333333333,
                                "b": 0.4392156862745098
                            },
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularPower": 2.56,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 0,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "bumpTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_粗02_法线.png",
                            "bumpLevel": 1.8,
                            "bumpUS": 3.5,
                            "bumpVS": 3.5,
                            "useParallaxOcclusion": false,
                            "useParallax": false,
                            "parallaxScaleBias": 0.05,
                            "bumpIndex": 0,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "lambert3": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 1,
                                "g": 0.5333333333333333,
                                "b": 0
                            },
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularPower": 2.56,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 0,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "Material #48": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 0.5607843137254902,
                                "g": 0.5607843137254902,
                                "b": 0.5607843137254902
                            },
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularPower": 100,
                            "alpha": 0.14,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 10,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "opacityTexture": "path:/3ds/app/dq/materialLib/textures/,name:yy-11.png",
                            "opaLevel": 5,
                            "opaUS": 1,
                            "opaVS": 1,
                            "opaIndex": 0,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "tamat": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "specularColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "specularPower": 64,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 0,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": false,
                            "diffuseTexture": "path:/3ds/app/dq/materialLib/textures/,name:dq--4.jpg",
                            "diffLevel": 1.4,
                            "diffUS": 4.49,
                            "diffVS": 9.97,
                            "diffIndex": 0,
                            "nofrediff": true,
                            "reflectionTexture": "path:/3ds/assets/materialLibNew/skyboxs/,name:roomgray",
                            "refLevel": 0.05,
                            "refIndex": 0,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "bzmat": {
                            "materialType": "StandardMaterial",
                            "diffuseColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "emissiveColor": {
                                "r": 0.32941176470588235,
                                "g": 0.32941176470588235,
                                "b": 0.32941176470588235
                            },
                            "specularColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "specularPower": 64,
                            "alpha": 1,
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "roughness": 0,
                            "indexOfRefraction": 0.98,
                            "useSpecularOverAlpha": false,
                            "diffuseTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "diffLevel": 1.15,
                            "diffUS": 20,
                            "diffVS": 20,
                            "diffIndex": 0,
                            "nofrediff": true,
                            "reflectionTexture": "path:/3ds/assets/materialLibNew/skyboxs/,name:roomgray",
                            "refLevel": 0.05,
                            "refIndex": 0,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "SZmat": {
                            "materialType": "PBRMetallicRoughnessMaterial",
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "alpha": 1,
                            "baseColor": {
                                "r": 0.7019607843137254,
                                "g": 0,
                                "b": 0
                            },
                            "metallic": 0.1,
                            "roughness": 0,
                            "occlusionStrength": 1,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "noalbedo": true,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "environmentTexture": "path:/3ds/assets/materialLibNew/skyboxs/,name:heibai_t",
                            "environmentLevel": 0.9,
                            "environmentIndex": 0,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        },
                        "blinn1": {
                            "materialType": "PBRMaterial",
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "alpha": 1,
                            "albedoColor": {
                                "r": 0.9019607843137255,
                                "g": 0.9019607843137255,
                                "b": 0.9019607843137255
                            },
                            "reflectivityColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "reflectionColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "metallic": 0,
                            "microSurface": 1,
                            "indexOfRefraction": 0.66,
                            "directIntensity": 1,
                            "emissiveIntensity": 1,
                            "environmentIntensity": 1,
                            "specularIntensity": 1,
                            "ambientTextureStrength": 1,
                            "useRoughnessFromMetallicTextureAlpha": true,
                            "useRoughnessFromMetallicTextureGreen": false,
                            "useMetallnessFromMetallicTextureBlue": false,
                            "useAmbientOcclusionFromMetallicTextureRed": false,
                            "useAmbientInGrayScale": false,
                            "useAlphaFromAlbedoTexture": false,
                            "useMicroSurfaceFromReflectivityMapAlpha": false,
                            "useRadianceOverAlpha": true,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "albedoTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "albedoLevel": 1.3,
                            "albedoUS": 1,
                            "albedoVS": 1,
                            "albedoIndex": 0,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        }
                    }
                };
                   var json1 = {
                       "materials": {
                        "blinn1": {
                            "materialType": "PBRMaterial",
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "alpha": 1,
                            "albedoColor": {
                                "r": 0.9019607843137255,
                                "g": 0.9019607843137255,
                                "b": 0.9019607843137255
                            },
                            "reflectivityColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "reflectionColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "metallic": 0,
                            "microSurface": 1,
                            "indexOfRefraction": 0.66,
                            "directIntensity": 1,
                            "emissiveIntensity": 1,
                            "environmentIntensity": 1,
                            "specularIntensity": 1,
                            "ambientTextureStrength": 1,
                            "useRoughnessFromMetallicTextureAlpha": true,
                            "useRoughnessFromMetallicTextureGreen": false,
                            "useMetallnessFromMetallicTextureBlue": false,
                            "useAmbientOcclusionFromMetallicTextureRed": false,
                            "useAmbientInGrayScale": false,
                            "useAlphaFromAlbedoTexture": false,
                            "useMicroSurfaceFromReflectivityMapAlpha": false,
                            "useRadianceOverAlpha": true,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "albedoTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "albedoLevel": 1.3,
                            "albedoUS": 1,
                            "albedoVS": 1,
                            "albedoIndex": 0,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        }
                    }
                   };
                   var json2 = {
                    "materials": {
                        "blinn1": {
                            "materialType": "PBRMaterial",
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "alpha": 1,
                            "albedoColor": {
                                "r": 1,
                                "g": 0.8392156862745098,
                                "b": 0.9254901960784314
                            },
                            "reflectivityColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "reflectionColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "metallic": 0,
                            "microSurface": 1,
                            "indexOfRefraction": 0.66,
                            "directIntensity": 1,
                            "emissiveIntensity": 1,
                            "environmentIntensity": 1,
                            "specularIntensity": 1,
                            "ambientTextureStrength": 1,
                            "useRoughnessFromMetallicTextureAlpha": true,
                            "useRoughnessFromMetallicTextureGreen": false,
                            "useMetallnessFromMetallicTextureBlue": false,
                            "useAmbientOcclusionFromMetallicTextureRed": false,
                            "useAmbientInGrayScale": false,
                            "useAlphaFromAlbedoTexture": false,
                            "useMicroSurfaceFromReflectivityMapAlpha": false,
                            "useRadianceOverAlpha": true,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "albedoTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "albedoLevel": 1.3,
                            "albedoUS": 1,
                            "albedoVS": 1,
                            "albedoIndex": 0,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        }
                    }
                };
                   var json3 = {
                    "materials": {
                        "blinn1": {
                            "materialType": "PBRMaterial",
                            "emissiveColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "alpha": 1,
                            "albedoColor": {
                                "r": 1,
                                "g": 0.9176470588235294,
                                "b": 0.7607843137254902
                            },
                            "reflectivityColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "reflectionColor": {
                                "r": 1,
                                "g": 1,
                                "b": 1
                            },
                            "ambientColor": {
                                "r": 0,
                                "g": 0,
                                "b": 0
                            },
                            "metallic": 0,
                            "microSurface": 1,
                            "indexOfRefraction": 0.66,
                            "directIntensity": 1,
                            "emissiveIntensity": 1,
                            "environmentIntensity": 1,
                            "specularIntensity": 1,
                            "ambientTextureStrength": 1,
                            "useRoughnessFromMetallicTextureAlpha": true,
                            "useRoughnessFromMetallicTextureGreen": false,
                            "useMetallnessFromMetallicTextureBlue": false,
                            "useAmbientOcclusionFromMetallicTextureRed": false,
                            "useAmbientInGrayScale": false,
                            "useAlphaFromAlbedoTexture": false,
                            "useMicroSurfaceFromReflectivityMapAlpha": false,
                            "useRadianceOverAlpha": true,
                            "useSpecularOverAlpha": true,
                            "nodiff": true,
                            "nofrediff": true,
                            "noref": true,
                            "nofreref": true,
                            "norefra": true,
                            "nofrerefra": true,
                            "noopa": true,
                            "nofreopa": true,
                            "noemi": true,
                            "nofreemi": true,
                            "nospe": true,
                            "nobump": true,
                            "albedoTexture": "path:/3ds/assets/materialLibNew/textures/,name:磨砂_细01.jpg",
                            "albedoLevel": 1.3,
                            "albedoUS": 1,
                            "albedoVS": 1,
                            "albedoIndex": 0,
                            "noambient": true,
                            "norelectivity": true,
                            "nometallic": true,
                            "noenvironment": true,
                            "nobase": true,
                            "noocclusion": true,
                            "nonormal": true,
                            "nomicro": true,
                            "nomr": true,
                            "nosg": true
                        }
                    }
                };
    View Code
    initSceneByJSON(json);

     

    四、动画缓冲

    //定义动画缓冲函数 - 平方缓冲
    var easingFunction = new BABYLON.QuadraticEase();
    easingFunction.setEasingMode(BABYLON.EasingFunction.EASIGMODE_EASEINOUT);

     

    五、显示隐藏点心

    function showMesh(mesh){
        BABYLON.Animation.CreateAndStartAnimation('show', mesh, 'visibility', 2, 2, mesh.visibility, 1 ,BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT, easingFunction, function(){
              lock = false;
        });
    }
    function hideMesh(mesh){
        BABYLON.Animation.CreateAndStartAnimation('hide', mesh, 'visibility', 2, 2, mesh.visibility, 0 ,BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT, easingFunction, function(){
              lock = false;
        });
    }

     

    六、改变冰淇淋主体颜色

    function toggleMaterial(color3, json){
         var bql = scene.getMeshByName("BQL");
    
         //step1: 创建Animation 对象
         var animationColor = new BABYLON.Animation("Color", "material.albedoColor", 30, BABYLON.Animation.ANIMATIONTTYPE_COLOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT);
    
         //step2: 动画健 数组
         var keys = [];
    
         keys.push({
             frame: 0,
             value: bql.material.albedoColor
         });
    
         keys.push({
             frame: 10,
             value: color3
         });
    
         //step3: 将动画阵列添加到 animation 对象
         animationColor.setKeys(keys);
    
         //step4: 动画链接到bql
         bql.animations = [];
         bql.animations.push(animationColor);
    
         //step5: 启动动画
         scene.beginAnimation(bql, 0, 10, false, 1, function(){
         initSceneByJSON(json);
         lock = false;
      })
    
    }

     

    七、改变冰淇淋点心类型

    function changeType(){
         $(".testType-group li").click(function(){
    
         if(lock){ //开关lock 根据index为材质改变颜色的时候 true
               return
         }
    
         var index = $(".testType-group li").index($(this));
    
         if(index <= 2){
               $(".testType-group li.type").removeClass("active");
               $(this).addClass("active");
         }else{
               if($(this).attr("class") == "active"){
                   $(this).removeClass("active");
               }else{
                   $(this).addClass("active");
               }
         }
    
         //局部变量 为下面使用重新定义一次
         var ala = scene.getMeshByName("ALA");
         var zs = scene.getMeshByName("ZS");
         var hf = scene.getMeshByName("HF");
    
         switch (index){
              case 0:
                 lock = true;
                 //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '原味');
                 toggleMaterial(new BABYLON.Color3(0.9294117647058824, 0.9294117647058824, 0.9294117647058824), json1);
                 break;
              case 1:
                 lock = true;       
    //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '草莓味'); toggleMaterial(new BABYLON.Color3(1, 0.8392156862745098, 0.9254901960784314), json2); break; case 2: lock = true; //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '榴莲味'); toggleMaterial(new BABYLON.Color3(1, 0.9176470588235294, 0.7607843137254902), json3); break; case 3: lock = true; //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '华夫脆'); if ($(this).attr("class") == "active") { showMesh(hf) } else { hideMesh(hf) } break; case 4: lock = true; //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '芝士蛋糕'); if ($(this).attr("class") == "active") { showMesh(zs) } else { hideMesh(zs) } break; case 5: lock = true; //Forreall3d.trackEvent('_trackEvent', 'dq冰淇凌', '按钮', '奥利奥'); if ($(this).attr("class") == "active") { showMesh(ala) } else { hideMesh(ala) } break; } })
    }

     

    八、冰淇淋模型倒置摇摆
    1、给所有网格模型添加同一个父对象:球体,用来控制所有模型

    //所有网格旋转 - 球体父对象
    var sphere = BABYLON.Mesh.CreateSphere("sphere", 10, 5, scene);
    sphere.visibility = 0;
    scene.meshes.forEach(function(mesh){
       if(mesh.name != "sphere"){
            if(mesh.parent){
                   mesh.parent.parent = sphere;
            }else{
                   mesh.parent = sphere;
            }
       }
    });
    
    var rotation = new BABYLON.Animation("allmesh","rotation", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
    var keys2 = [];
    keys2.push({
           frame: 20,
           value: new BABYLON.Vector3(0, 0, 0)
    });
    keys2.push({
           frame: 25,
           value: new BABYLON.Vector3(0, 0, -0.1)
    });
    keys2.push({
           frame: 30,
           value: new BABYLON.Vector3(0, 0, 0.1)
    });
    keys2.push({
           frame: 35,
           value: new BABYLON.Vector3(0, 0, -0.1)
    });
    keys2.push({
           frame: 40,
           value: new BABYLON.Vector3(0, 0, 0)
    });
    rotation.setKeys(keys2);
    rotation.setEasingFunction(easingFunction);
    sphere.animations = [];
    sphere.animations.push(rotation);

    2、动画+自动旋转:实现冰淇淋“倒杯不洒”效果

    $('.btn').click(function(){
        if(lock && !autoRotate){
             return
        }
    
        lock = true;
        autoRotate.pause();
    
        //动画前为防止闪动 - 定义限制为null
        var lowbeta = scene.activeCamera.lowerBetaLimit;
        var upperbeta = scene.activeCamera.upperBetaLimit;
        var lowradius = scene.activeCamera.lowerRadiusLimit;
        var upperradius = scene.activeCamera.upperRadiusLimit;
    
        scene.activeCamera.lowerBetaLimit = null;
        scene.activeCamera.upperBetaLimit = null;
        scene.activeCamera.lowerRadiusLimit = null;
        scene.activeCamera.upperRadiusLimit = null;
    
        BABYLON.Animation.CreateAndStartAnimation("beta", scene.activeCamera, "beta", 2, 2, scene.activeCamera.beta, -1.436, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT, easingFunction, function(){
            scene.beginAnimation(sphere, 20, 40, false, 0.3, function(){
                    BABYLON.Animation.CreateAndStartAnimation("beta", scene.activeCamera, "beta", 2, 2, scene.activeCamera.beta, 1.436, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT, easingFunction);
                    BABYLON.Animation.CreateAndStartAnimation("alpha",scene.activeCamera,"alpha", 2, 2, scene.activeCamera.alpha, -Math.PI / 2, BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT,easingFunction);
                            lock = false;
    
                            //恢复 相机限制
                            scene.activeCamera.lowerBetaLimit = lowbeta;
                            scene.activeCamera.upperBetaLimit = upperbeta;
                            scene.activeCamera.lowerRadiusLimit = lowradius;
                            scene .activeCamera.upperRadiusLimit = upperradius;
    
                            autoRotate.restart(0.0015, "left");
                    })
    
             });
       BABYLON.Animation.CreateAndStartAnimation("alpha", scene.activeCamera, "alpha", 2, 2, scene.activeCamera.alpha, Math.PI / 2 , BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT, easingFunction)
    
    });

     

    九、冰淇淋自动及手动旋转

    //相机自动旋转
    setTimeout(function(){
          autoRotate = new RotateCamera(camera, "alpha", 0.0015, "left");
    },3000);
    
    function RotateCamera(camera, property, speed, Dir){
          var rotateState = Dir;
          var touchstartX = 0;
          this.pause = function(){
               speed = 0;
               scene.onBeforeRenderObservable.removeCallback(autoRotate);
          };
          this.restart = function(_speed,_rotateState){
               speed = _speed;
               if(_rotateState == "left" || _rotateState == "right"){
                       rotateState = _rotateState;
               }
               scene.onBeforeRenderObservable.removeCallback(autoRotate);
               scene.onBeforeRenderObservable.add(autoRotate);
          };
    
         //手机  左右旋转事件
         document.querySelector("canvas").addEventListener("touchstart",function(e){
               touchstartX = e.touches[0].clientX;
         });
         document.querySelector("canvas").addEventListener("touchmove",function(e){
               if(e.touches[0].clientX - touchstartX > 0){
                       rotateState = "left"
               }else{
                       rotateState = "right"
               }
         });
    
         //PC端
         scene.onPointerObservable.add(function(e){
              touchstartX = e.event.clientX;
         },1);
         scene.onPointerObservable.add(function(e){
             if(e.event.clientX - touchstartX > 0){
                  rotateState = "left";
             }else{
                  rotateState = "right";
             }
         },2);
    
         function autoRotate(){
             //scene.activeCamera
             if(camera instanceof BABYLON.FreeCamera){
             if(rotateState == 'left'){
                  camera.rotation[property] -= speed;
             }else{
                  camera.rotation[property] += speed;
             }
         }
    
         if(camera instanceof BABYLON.ArcRotateCamera){
             if(rotateState == 'left'){
                  camera[property] -= speed;
             }else{
                  camera[property] += speed;
             }
          }
        }
    
      scene.onBeforeRenderObservable.add(autoRotate);
    }

     

    十、其它知识点补充

    1、Color3 Color4

    new BABYLON.Color3(0, 0, 1);  //分别表示rgb
    new BABYLON.Color4(0, 0, 1, 0);  //分别表示rgba,最后一个是apha 透明通道
    new BABYLON.Color4.FromString("#ffffffff"); //颜色转换函数

    2、公共引用的原JS文件

    ...3dsjsak_online
    loader-t.js 加载模型,defaultEvent.js 封装Ajax,配置兼容等默认事件

    3、禁用高亮

    *{
        -webkit-tap-highlight-color: rgba(0,0,0,0);
    }

    这个属性只用于iOS (iPhone和iPad)

    当你点击一个链接或者通过Javascript定义的可点击元素的时候,

    它就会出现一个半透明的灰色背景。

    要重设这个表现,你可以设置-webkit-tap-highlight-color为任何颜色。

    想要禁用这个高亮,设置颜色的alpha值为0即可。

    4、设置背景图片

    background: url(../img/body.jpg)  repeat-x  center/cover;

    background-size的cover特定值会保持图像本身的宽高比例,将图片缩放到正好完全覆盖定义背景的区域。

    background: url(../img/choose.png)  no-repeat  center/contain;

     background-size的contain特定值会保持图像本身的宽高比例,将图片缩放到宽度或高度正好适应定义背景的区域。 



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

  • 相关阅读:
    IntelliJ Idea 常用快捷键列表
    管理Django1.9静态文件static
    django模板中如何导入js、css等外部文件
    Struts2+hibernate 结合,实现登陆校验
    python统计文档中词频
    Hibernate连接各种数据库的配置
    hibernateDAO层基本的增删改查
    vue2.0+element+node+webpack搭建的一个简单的后台管理界面
    WEB 前端开发插件整理
    机器学习之条件随机场(八)
  • 原文地址:https://www.cnblogs.com/ljq66/p/9898198.html
Copyright © 2020-2023  润新知