成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于WEBGL架構(gòu)的3D可視化平臺(tái)—家居城3D展示

libin19890520 / 3540人閱讀

摘要:本文將模擬一個(gè)歐派,讓大家足不出戶在家里就能更加直觀立體的挑選家具。創(chuàng)建廣告牌寬度高度深度寬度上的節(jié)數(shù)高度上的節(jié)數(shù)深度上的節(jié)數(shù)中心點(diǎn)家具展銷歐派這里給我們給整個(gè)場(chǎng)景用抽象物體圍起來了,以免第一人稱控件開啟時(shí)會(huì)造成無碰撞體系墜落出場(chǎng)景。

本文將模擬一個(gè)“歐派”,讓大家足不出戶在家里就能更加直觀立體的挑選家具。

第一步,利用CampusBuilder搭建模擬場(chǎng)景。CampusBuilder的模型庫有各種各樣的模型,使我們搭建出的場(chǎng)景更逼真。使用CampusBuilde創(chuàng)建層級(jí),之后再給層級(jí)加外立面就出現(xiàn)了當(dāng)前的效果。這次我們其實(shí)只是需要一個(gè)樓層,所以我們就把上次使用的過的場(chǎng)景拿來改造一下。詳情移步:CampusBuilder3D場(chǎng)景制作工具

演示地址:EXAMPLE

/加載場(chǎng)景代碼
var app = new THING.App({
    // 場(chǎng)景地址
    "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/家具城",
    //背景設(shè)置
    "skyBox": "BlueSky"
});

第二步,開啟層級(jí)切換。因?yàn)槲覀兡M的“宜家”是某建筑中的一層,所以這里要開啟層級(jí)切換以便進(jìn)入家具城。

app.on("load", function (ev) {
    //開啟層級(jí)切換
    app.level.change(ev.campus);
});

同時(shí)給家具城創(chuàng)建一個(gè)廣告牌,防止我們?cè)诘谝蝗朔Q下行走會(huì)“迷路”。貼圖可以自行上傳。

//創(chuàng)建廣告牌
var advertisingSign = app.create({
    type: "Box",
    width: 15.0, // 寬度 
    height: 5.0, // 高度 
    depth: 0.5, // 深度 
    widthSegments: 1.0, //寬度上的節(jié)數(shù) 
    heightSegments: 1.0, // 高度上的節(jié)數(shù) 
    depthSegments: 1.0, // 深度上的節(jié)數(shù) 
    center: "Bottom", // 中心點(diǎn) 
    style: {
        color: "#ffffff",
        opacity: 2,
        image: "/uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/file/家具展銷/歐派.jpg"
    },
    parent: app.query("building_01")[0],
});
advertisingSign.position = [50.957, 15.883, -16];

這里給我們給整個(gè)場(chǎng)景用抽象物體圍起來了,以免第一人稱控件開啟時(shí)會(huì)造成無碰撞體系墜落出場(chǎng)景。記得要給他們組合并命名為‘碰撞盒’,在場(chǎng)景加載完成后將他們“隱藏”起來。

app.on("load", function (ev) {
    //開啟層級(jí)切換
    app.level.change(ev.campus);
    //將碰撞盒的透明度設(shè)置為0,并且將他們的pickable屬性設(shè)置為false,不可被選中。
    var crashBox = app.query("碰撞盒")[0];
    crashBox.style.opacity = 0;
    crashBox.pickable = false;
});

第三步,添加第一人稱控件。

先創(chuàng)建兩個(gè)按鈕來控制第一人稱控件。

new THING.widget.Button("第一人稱", add_control);
    new THING.widget.Button("自由視角", remove_control);

添加第一人稱控件

//第一人稱組件
var ctrl = null;
function add_control() {
    if (app.level.current.name == "Campus") {
        app.camera.position = [75.28812158204005, 1.8016147124541857, 29.699063489018236];
        app.camera.target = [53.32909358623788, 4.541642332131091, -9.470748625431646];

    }
    if (app.level.current.name != "Campus") {
        app.level.change(app.query("新樓層")[0]);
        app.camera.flyTo({
            "position": [41.05650213795261, 1.3469938677565356, -18.6143831867287],
            "target": [38.982251559488404, 0.7081383467333933, -23.867802267306008],
            "time": 2000,
            "complete": function () {
            }
        });
    }
    if (ctrl) return;
    ctrl = app.addControl(
        new THING.WalkControl({
            walkSpeed: 0.02,
            turnSpeed: 0.25,
            gravity: 30,
            eyeHeight: 1.7,
            jumpSpeed: 0,
            enableKeyRotate: false,
            useCollision: true,//app.scene
            useGravity: true,
            groundObjects: [app.scene] //把整個(gè)場(chǎng)景都添加,可把樓層或其他需要檢測(cè)的添加進(jìn)入碰撞體系里 | 默認(rèn)值 園區(qū)地板
        })
    );
}

移除第一人稱控件

function remove_control() {
    if (!ctrl)
        return;
    app.removeControl(ctrl);
    ctrl = null;
}

第四步,創(chuàng)建界面panel用于顯示家居的詳細(xì)信息。

添加界面

var panel = null;
function add_panel(title, total, goodsInfo) {
    panel = new THING.widget.Panel({
        titleText: "商品名稱:" + title,
        closeIcon: true, // 是否有關(guān)閉按鈕 
        dragable: false, // 是否可以拖拽 
        retractable: true,
        opacity: 0.9, // 透明度 
        hasTitle: true
    });
    panel.position = [1000, 0];
    var dataObj = {
        total: total,
        goodsInfo: goodsInfo
    };
    var total = panel.addString(dataObj, "total").caption("總價(jià)");
    var goodsInfo = panel.addString(dataObj, "goodsInfo").caption("商品介紹");

}

移除界面

    function remove_panel() {
    if (panel) {
        panel.destroy();
        panel = null;
    }
}

最后一步,為商品和大樓添加點(diǎn)擊事件。這里我們也要卸載雙擊事件,因?yàn)槭髽?biāo)雙擊時(shí)會(huì)聚焦當(dāng)前物體,與我們的業(yè)務(wù)邏輯有沖突所以這里給他卸載掉。首先是普通的點(diǎn)擊事件,鼠標(biāo)左鍵點(diǎn)擊時(shí)會(huì)出現(xiàn)商品的信息。右鍵點(diǎn)擊時(shí),會(huì)移除第一人稱控件。

    //鼠標(biāo)點(diǎn)擊事件
app.on("click", function (ev) {
    if (ev.button == 2) {
        remove_control();
        return;
    }
    remove_panel();
    switch (ev.object.name) {
        case "桌椅組合1": add_panel("自然風(fēng)格餐桌系列", "2598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "桌椅組合2": add_panel("線代都市餐桌系列", "2198.00", "  利落線條,刻畫幾何形底座。自然致簡的淺木色橡木拼花,帶有淡淡的手工白蠟處理,搭配內(nèi)斂的深灰色線條,形成微妙平衡,線代感呼之欲出。");
            break;
        case "桌椅組合3": add_panel("緊湊家庭餐桌系列", "1998.00", "  緊湊家庭餐廳,享四人圍坐的寬適與愜意。精巧的尺寸,圓融包容的圓桌設(shè)計(jì),即便是緊湊的客餐廳一體空間,也能歡暢小談。");
            break;
        case "沙發(fā)組合1": add_panel("本色筆記組合沙發(fā)", "2598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合2": add_panel("云海闌珊組合沙發(fā)", "8888.00", "  全家人圍坐的恬淡時(shí)刻,更多一份舒適。借一抹海天的藍(lán),再偷來云朵的舒軟,只為全家圍坐的時(shí)刻,盡享舒適怡然。");
            break;
        case "沙發(fā)組合3": add_panel("商務(wù)舒適組合沙發(fā)", "8598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合4": add_panel("自然風(fēng)格餐桌系列", "5508.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合5": add_panel("自然風(fēng)格餐桌系列", "2578.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
    }
});
app.off("dblclick");     

代碼塊 => 層級(jí) => 觸發(fā) => 修改進(jìn)入層級(jí)操作

這里我們將進(jìn)入層級(jí)的操作改為直接進(jìn)入我們的家具城這一層“新樓層”。

//修改singleClick點(diǎn)擊之后進(jìn)入級(jí)的操作
app.on(THING.EventType.SingleClick, function (ev) {
    var object = ev.object;
    if (object.name == "building_01") {
        app.level.change(app.query("新樓層")[0]);
        app.camera.flyTo({
            "position": [41.05650213795261, 1.3469938677565356, -18.6143831867287],
            "target": [38.982251559488404, 0.7081383467333933, -23.867802267306008],
            "time": 2000,
            complete: function () {
                console.log("我已經(jīng)進(jìn)來了" + app.level.current.name);
            }
        });
    }
    return;
}, "customLevelEnterMethod");

小結(jié):

第一人稱控件的問題,Campus => 新樓層 ,如果不設(shè)置攝像機(jī)飛到一合理位置,攝像機(jī)將脫離樓層,因?yàn)檫M(jìn)入樓層的時(shí)候攝像機(jī)的默認(rèn)位置不在樓層上,所以每次在樓層內(nèi)添加第一人稱控件時(shí)我們必須要將攝像機(jī)放到一個(gè)合理的位置。

全部代碼

//加載場(chǎng)景代碼
var app = new THING.App({
    // 場(chǎng)景地址
    "url": "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/家具城",
    //背景設(shè)置
    "skyBox": "BlueSky"
});

app.on("load", function (ev) {
    app.level.change(ev.campus);
    var crashBox = app.query("碰撞盒")[0];
    crashBox.style.opacity = 0;
    crashBox.pickable = false;
    new THING.widget.Button("第一人稱", add_control);
    new THING.widget.Button("自由視角", remove_control);

});

//修改singleClick點(diǎn)擊之后進(jìn)入級(jí)的操作
app.on(THING.EventType.SingleClick, function (ev) {
    var object = ev.object;
    if (object.name == "building_01") {
        app.level.change(app.query("新樓層")[0]);
        app.camera.flyTo({
            "position": [41.05650213795261, 1.3469938677565356, -18.6143831867287],
            "target": [38.982251559488404, 0.7081383467333933, -23.867802267306008],
            "time": 2000,
            complete: function () {
                console.log("我已經(jīng)進(jìn)來了" + app.level.current.name);
            }
        });
    }
    return;
}, "customLevelEnterMethod");

//鼠標(biāo)點(diǎn)擊事件
app.on("click", function (ev) {
    if (ev.button == 2) {
        remove_control();
    }
    if (typeof (ev.object) == undefined)
        return;
    remove_panel();
    switch (ev.object.name) {
        case "桌椅組合1": add_panel("自然風(fēng)格餐桌系列", "2598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "桌椅組合2": add_panel("線代都市餐桌系列", "2198.00", "  利落線條,刻畫幾何形底座。自然致簡的淺木色橡木拼花,帶有淡淡的手工白蠟處理,搭配內(nèi)斂的深灰色線條,形成微妙平衡,線代感呼之欲出。");
            break;
        case "桌椅組合3": add_panel("緊湊家庭餐桌系列", "1998.00", "  緊湊家庭餐廳,享四人圍坐的寬適與愜意。精巧的尺寸,圓融包容的圓桌設(shè)計(jì),即便是緊湊的客餐廳一體空間,也能歡暢小談。");
            break;
        case "沙發(fā)組合1": add_panel("本色筆記組合沙發(fā)", "2598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合2": add_panel("云海闌珊組合沙發(fā)", "8888.00", "  全家人圍坐的恬淡時(shí)刻,更多一份舒適。借一抹海天的藍(lán),再偷來云朵的舒軟,只為全家圍坐的時(shí)刻,盡享舒適怡然。");
            break;
        case "沙發(fā)組合3": add_panel("商務(wù)舒適組合沙發(fā)", "8598.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合4": add_panel("自然風(fēng)格餐桌系列", "5508.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
        case "沙發(fā)組合5": add_panel("自然風(fēng)格餐桌系列", "2578.00", "  簡約的圓桌設(shè)計(jì),微冷的現(xiàn)代居室圍成一桌大自然的感覺。自然本色,簡介的設(shè)計(jì),彰顯質(zhì)樸、實(shí)用、少即是多的線代生活哲學(xué)。");
            break;
    }
});
//卸載雙擊事件
app.off("dblclick");

// 界面組件 
var panel = null;
function add_panel(title, total, goodsInfo) {
    panel = new THING.widget.Panel({
        titleText: "商品名稱:" + title,
        closeIcon: true, // 是否有關(guān)閉按鈕 
        dragable: false, // 是否可以拖拽 
        retractable: true,
        opacity: 0.9, // 透明度 
        hasTitle: true
    });
    panel.position = [1000, 0];
    var dataObj = {
        total: total,
        goodsInfo: goodsInfo
    };
    var total = panel.addString(dataObj, "total").caption("總價(jià)");
    var goodsInfo = panel.addString(dataObj, "goodsInfo").caption("商品介紹");

}
function remove_panel() {
    if (panel) {
        panel.destroy();
        panel = null;
    }
}

//創(chuàng)建廣告牌
var advertisingSign = app.create({
    type: "Box",
    width: 15.0, // 寬度 
    height: 5.0, // 高度 
    depth: 0.5, // 深度 
    widthSegments: 1.0, //寬度上的節(jié)數(shù) 
    heightSegments: 1.0, // 高度上的節(jié)數(shù) 
    depthSegments: 1.0, // 深度上的節(jié)數(shù) 
    center: "Bottom", // 中心點(diǎn) 
    style: {
        color: "#ffffff",
        opacity: 2,
        image: "/uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/file/家具展銷/歐派.jpg"
    },
    parent: app.query("building_01")[0],
});
advertisingSign.position = [50.957, 15.883, -16];

//第一人稱組件
var ctrl = null;
function add_control() {
    if (app.level.current.name == "Campus") {
        app.camera.position = [75.28812158204005, 1.8016147124541857, 29.699063489018236];
        app.camera.target = [53.32909358623788, 4.541642332131091, -9.470748625431646];

    }
    if (app.level.current.name != "Campus") {
        app.level.change(app.query("新樓層")[0]);
        app.camera.flyTo({
            "position": [41.05650213795261, 1.3469938677565356, -18.6143831867287],
            "target": [38.982251559488404, 0.7081383467333933, -23.867802267306008],
            "time": 2000,
            "complete": function () {
            }
        });
    }
    if (ctrl) return;
    ctrl = app.addControl(
        new THING.WalkControl({
            walkSpeed: 0.02,
            turnSpeed: 0.25,
            gravity: 30,
            eyeHeight: 1.7,
            jumpSpeed: 0,
            enableKeyRotate: false,
            useCollision: true,//app.scene
            useGravity: true,
            groundObjects: [app.scene] //把整個(gè)場(chǎng)景都添加,可把樓層或其他需要檢測(cè)的添加進(jìn)入碰撞體系里 | 默認(rèn)值 園區(qū)地板
        })
    );
}
function remove_control() {
    if (!ctrl)
        return;
    app.removeControl(ctrl);
    ctrl = null;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100512.html

相關(guān)文章

  • IOTE 2019國際物聯(lián)網(wǎng)博覽會(huì)—優(yōu)锘科技受邀參展,ThingJS提供最佳產(chǎn)品體驗(yàn)

    摘要:國際物聯(lián)網(wǎng)博覽會(huì)蘇州站于月日日蘇州國際博覽中心順利舉行。優(yōu)锘科技非常榮幸地受邀,帶著最高性能的產(chǎn)品亮相此次展會(huì),優(yōu)質(zhì)的商務(wù)接待及專業(yè)技術(shù)展示,為廣大行業(yè)客戶帶來最佳的產(chǎn)品體驗(yàn)。 IOTE 2019國際物聯(lián)網(wǎng)博覽會(huì)--蘇州站于3月13日-15日蘇州國際博覽中心順利舉行。優(yōu)锘科技非常榮幸地受邀,帶著最高性能的ThingJS產(chǎn)品亮相此次展會(huì),優(yōu)質(zhì)的商務(wù)接待及專業(yè)技術(shù)展示,為廣大行業(yè)客戶帶來最...

    wanghui 評(píng)論0 收藏0
  • 從“智能”樓宇到“智慧”樓宇—ThingJS助力“智慧”升級(jí)

    摘要:智慧樓宇可視化系統(tǒng)是綜合上述手段打造出的智慧樓宇可查可管可控的一體化可視平臺(tái)。智能環(huán)境可視化展示樓宇內(nèi)水電氣冷風(fēng)等的管線含流向及設(shè)備的空間分布。集成停車引導(dǎo)系統(tǒng),高亮展示最佳停車位及到車位的最佳路線。 智慧樓宇大勢(shì)所趨,從智能 到智慧,一字之差,它到底有多智慧? 我們可以看一下智慧樓宇3D可視應(yīng)用視頻:https://v.qq.com/x/page/h0767... 基于ThingJS...

    hqman 評(píng)論0 收藏0
  • ThingJS物聯(lián)網(wǎng)3D視化平臺(tái)——智慧應(yīng)用

    摘要:說起物聯(lián)網(wǎng),大家的第一反應(yīng)就是智慧城市。在物聯(lián)網(wǎng)的幫助下,得以讓我們居住的城市正變得越來越有智慧。作為面向物聯(lián)網(wǎng)的可視化開發(fā)平臺(tái)有廣闊的行業(yè)應(yīng)用場(chǎng)景。 隨著科技的發(fā)展,5G網(wǎng)絡(luò)的到來,將開啟萬物即插即慧的新時(shí)代。這就是物聯(lián)網(wǎng),當(dāng)網(wǎng)絡(luò)不再是阻礙,萬物互聯(lián),萬物可視,把數(shù)字世界帶入每個(gè)人、每個(gè)家庭、每個(gè)組織,構(gòu)建萬物互聯(lián)的智能世界。 說起物聯(lián)網(wǎng),大家的第一反應(yīng)就是智慧城市。在物聯(lián)網(wǎng)的幫助下...

    eccozhou 評(píng)論0 收藏0
  • 數(shù)字孿生——思考IoT未來,UINO2019展會(huì)邀您蒞臨!

    摘要:數(shù)字孿生思考未來,實(shí)現(xiàn)智能可視。同期將舉行多場(chǎng)高端活動(dòng),共商物聯(lián)網(wǎng)行業(yè)發(fā)展大計(jì),集商貿(mào)交易展示交流活動(dòng)宣傳評(píng)優(yōu)推介為一體的國際化盛會(huì)。 優(yōu)锘科技作為互聯(lián)網(wǎng)IT可視化管理和物聯(lián)網(wǎng)IoT可視化管理領(lǐng)域的領(lǐng)導(dǎo)廠商,2019又將展開新系列市場(chǎng)活動(dòng),我們期待與業(yè)界專業(yè)人士共同探討及交流行業(yè)最前沿的技術(shù)與趨勢(shì)。showImg(https://segmentfault.com/img/bVbstwz...

    shinezejian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<