美文网首页
Playcanvas之加载material/skybox/fon

Playcanvas之加载material/skybox/fon

作者: 千伞万伞 | 来源:发表于2020-07-17 18:07 被阅读0次

    这里很多都是依照官方demo做的尝试,但是奈何硬件条件一般,所以就先将常用语法记录下来,以备后用,之后再慢慢深入学习

    • 简单的颜色设置
    var material = new pc.BasicMaterial();
    material.color.set(1, 0, 0);
    // material.colorMap = diffuseMap; // 默认可以为空
    material.update();
    box1.model.material = material;
    // or
    // box1.model.meshInstances[0].material = material;
    // 目前不知道原理,留个坑
    
    • 更改模型材质
    app.assets.loadFromUrl("../FYPlaycanvas/assets/textures/heart.png", "texture", 
    function (err, asset) {
                    var material = new pc.StandardMaterial();
                    material.diffuseMap = asset.resource;
                    material.update();
    
                    entity.model.meshInstances[0].material = material;
                    console.log(entity.model.meshInstances);
                });
    
    • 为金属器具设置pc自带的金属色泽
    var material = new pc.StandardMaterial();
    material.metalness = 1; // 0..1 更加具有金属色泽
    material.shininess = 0.5 * 100; // 0..100 由粗糙到更加具有金属光泽,甚至反光
    material.useMetalness = true;
    material.update();
    var box1 = new pc.Entity();
    box1.addComponent("model", {
       material: material,
       type: "box"
    });
    app.root.addChild(box1);
    
    • 为场景添加天空盒,dds是一种图片格式
    var cubemapAsset = new pc.Asset('helipad.dds', 'cubemap', {
                url: "../FYPlaycanvas/assets/cubemaps/helipad.dds"
            }, {
                type: pc.TEXTURETYPE_RGBM
            });
    app.assets.add(cubemapAsset);
    app.assets.load(cubemapAsset);
    cubemapAsset.ready(function () {
        app.scene.setSkybox(cubemapAsset.resources);
    });
    
    • 添加文字
    var createText = function (fontAsset, message, x, y, z, rot) {
                // Create a text element-based entity
                var text = new pc.Entity();
                text.addComponent("element", {
                    anchor: [0.5, 0.5, 0.5, 0.5],
                    fontAsset: fontAsset,
                    fontSize: 0.5,
                    pivot: [0.5, 0.5],
                    text: message,
                    type: pc.ELEMENTTYPE_TEXT
                });
                text.setLocalPosition(x, y, z);
                text.setLocalEulerAngles(0, 0, rot);
                app.root.addChild(text);
            };
    // 加载字体
    var fontAsset = new pc.Asset('arial.json', "font", { url: "../FYPlaycanvas/assets/fonts/arial.json" });
            fontAsset.on('load', function () {
                createText(fontAsset, 'Glossiness', 0, -2 * 0.5, 0, 0);
                createText(fontAsset, 'Metalness', -3 * 0.5, 0, 0, 90);
            });
    app.assets.add(fontAsset);
    app.assets.load(fontAsset);
    
    • 为entity挂载脚本,这里是为相机实体挂载官方的飞行相机脚本
    // 注意这个创建的app不是那种基础的,如:var app = new pc.Application(canvas);需要鼠标权限
    var app = new pc.Application(canvas, {
        mouse: new pc.Mouse(canvas),
        keyboard: new pc.Keyboard(window)
    });
    var camera = new pc.Entity();
    camera.addComponent("camera", {
        clearColor: new pc.Color(0.4, 0.45, 0.5)
    });
    camera.translate(0, 0, 4);
    
    app.assets.loadFromUrl('../FYPlaycanvas/assets/scripts/camera/fly-camera.js', 'script', function (err, asset) {
        camera.addComponent("script");
        camera.script.create("flyCamera");
    });
    app.root.addChild(camera);
    

    相关文章

      网友评论

          本文标题:Playcanvas之加载material/skybox/fon

          本文链接:https://www.haomeiwen.com/subject/lgwghktx.html