欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端如何使用Cesium加載三維模型詳細(xì)攻略

 更新時(shí)間:2024年05月25日 11:34:09   作者:Devil楓  
三維模型數(shù)據(jù)格式種類多樣,常見的有DAE、OBJ、STL、3DS?MAX、CLM、IFC等數(shù)據(jù)格式,下面這篇文章主要給大家介紹了關(guān)于前端如何使用Cesium加載三維模型的相關(guān)資料,需要的朋友可以參考下

前言

想象一下,地球在你眼前旋轉(zhuǎn),上面還有各種3D模型,是不是很酷?Cesium是一個(gè)超酷的庫,專門用來創(chuàng)建超炫的3D地球和地圖。好,言歸正傳,今天這篇文章就分享一下前端如何使用Cesium加載三維模型。

一:準(zhǔn)備工作

首先,確保你已經(jīng)安裝了Cesium庫??梢詮腃esium官網(wǎng)下載最新版本的庫文件,或者使用npm進(jìn)行安裝:

npm install cesium
或者
yarn add cesium

然后,找一個(gè)舒服的地方坐下,準(zhǔn)備好開始你的3D之旅

二:加載模型

要加載一個(gè)3D模型,你需要知道模型在哪里,然后告訴Cesium去哪里找它。就像你告訴外賣小哥你的地址一樣。然后,你就可以把這個(gè)模型加到你的地球上了!

// 創(chuàng)建你的Cesium Viewer  
let viewer = new Cesium.Viewer('cesiumContainer');  
  
// 定義模型的坐標(biāo)和大小  
let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(  
    Cesium.Cartesian3.fromDegrees(-75.628982, 40.028194),   
    new Cesium.HeadingPitchRoll()   
);  
  
// 定義模型的路徑和其他選項(xiàng)  
let modelOptions = {  
    uri: 'path/to/your/model.gltf',   
    scale: 1.0,   
    minimumPixelSize: 128,   
    maximumScale: 20000,   
    modelMatrix: modelMatrix   
};  
  
// 把模型加到場景里!  
viewer.scene.primitives.add(new Cesium.Model(modelOptions));

我們首先創(chuàng)建了一個(gè)Cesium Viewer實(shí)例,然后定義了模型的路徑和選項(xiàng)。其中,modelMatrix參數(shù)用于定義模型的變換矩陣,包括位置、方向、俯仰和偏航角度等。然后,我們使用new Cesium.Model()構(gòu)造函數(shù)創(chuàng)建一個(gè)模型實(shí)例,并將模型添加到場景中。

當(dāng)然別忘了把’path/to/your/model.gltf’替換成你自己的GLTF模型文件路徑哦!如果你有Blender或者其他的3D建模軟件,你可以導(dǎo)出為GLTF格式,然后放到你的項(xiàng)目里。建議用blender免費(fèi)而且還比較好用。

三:交互和動(dòng)畫

當(dāng)然,加載模型只是第一步。你還可以和模型互動(dòng)哦!比如你可以給模型添加碰撞檢測,這樣你就可以知道哪些地方可以“撞”到模型。就像玩虛擬現(xiàn)實(shí)游戲一樣!

首先,你需要定義一個(gè)碰撞器的形狀和大小。然后,你可以把這個(gè)碰撞器加到場景里,和你的模型一起顯示出來。就像給你的模型穿上盔甲一樣!

// 定義碰撞器的位置和尺寸  
var boxGeometry = new Cesium.BoxGeometry({  
    length: 100000, // 長度(單位:米)  
    width: 100000, // 寬度(單位:米)  
    height: 100000 // 高度(單位:米)  
});  
var boxMaterial = new Cesium.Material({  
    fabric: {  
        type: 'Grid', // 使用網(wǎng)格材質(zhì)類型  
        unlit: true // 不進(jìn)行光照計(jì)算,僅顯示碰撞器輪廓線  
    }  
});  
var boxPrimitive = new Cesium.Primitive({ // 創(chuàng)建碰撞器實(shí)體對象  
    geometryInstances: new Cesium.GeometryInstance({ // 定義碰撞器幾何體實(shí)例  
        geometry: boxGeometry, // 使用BoxGeometry作為幾何體類型  
        modelMatrix: modelMatrix, // 設(shè)置模型變換矩陣,使其與模型對齊  
        id: 'box' // 設(shè)置碰撞器標(biāo)識符,方便后續(xù)查找和識別碰撞事件  
    }),  
    asynchronous: false, // 是否異步加載碰撞器幾何體數(shù)據(jù),這里選擇同步加載以提高性能和效率  
    material: boxMaterial // 設(shè)置碰撞器材質(zhì)屬性,這里使用網(wǎng)格材質(zhì)類型顯示輪廓線效果  
});  
viewer.scene.primitives.add(boxPrimitive); // 將碰撞器添加到場景中顯示出來。

四:其他api實(shí)例

就寫幾個(gè)我用到的吧。

1.地理信息查詢

當(dāng)你想要查找某個(gè)地點(diǎn)的具體信息時(shí),可以使用Cesium的地理信息查詢功能。例如,你可以通過經(jīng)緯度坐標(biāo)或地名來查詢相關(guān)的地理信息

viewer.geocoder.geocode({  
    text: '北京',  
    view: Cesium.ScreenSpaceEventType.LEFT_CLICK  
}).then(function(results) {  
    // 查詢成功,獲取查詢結(jié)果  
    var entity = results[0].entity;  
    console.log(entity); // 輸出查詢到的實(shí)體信息  
});

2.軌跡繪制

如果你想要在地圖上繪制軌跡,可以使用Cesium提供的軌跡繪制工具。通過定義一系列的經(jīng)緯度坐標(biāo),你可以輕松地繪制出軌跡。

// 定義軌跡的坐標(biāo)點(diǎn)數(shù)組  
var waypoints = [  
    Cesium.Cartesian3.fromDegrees(116.407, 39.904), // 北京  
    Cesium.Cartesian3.fromDegrees(121.473, 31.230), // 上海  
    Cesium.Cartesian3.fromDegrees(104.065, 30.574)  // 成都  
];  
  
// 創(chuàng)建軌跡實(shí)體  
var polyline = viewer.entities.add({  
    polyline: {  
        positions: waypoints,  
        width: 5,  
        material: Cesium.Color.RED,  
        leadTime: 0,  
        trailTime: 0  
    }  
});

定義一個(gè)包含經(jīng)緯度坐標(biāo)的數(shù)組waypoints,表示軌跡上的點(diǎn)。然后,我們使用viewer.entities.add()方法創(chuàng)建了一個(gè)紅色的軌跡實(shí)體,并將其添加到地圖上。通過調(diào)整width參數(shù)可以改變軌跡的寬度,而leadTime和trailTime參數(shù)則分別控制軌跡的前導(dǎo)和尾跡時(shí)間

3.地理編碼

如果你有一系列的地名或地址,并想要獲取其對應(yīng)的經(jīng)緯度坐標(biāo),可以使用Cesium的地理編碼功能。通過地理編碼,你可以將地址轉(zhuǎn)換為準(zhǔn)確的坐標(biāo)位置

var viewer = new Cesium.Viewer('cesiumContainer');  
var encodedAddress = '北京市朝陽區(qū)'; // 需要地理編碼的地址或地名  
var request = {  
    address : encodedAddress, // 地址或地名字符串  
    resource : 'address' // 地理編碼資源類型,這里使用地址編碼資源類型(address)進(jìn)行示范。如果使用地名編碼資源類型(geocode),需要傳遞地名相關(guān)的參數(shù)。例如:{ name : '北京' }。此外,還可以選擇其他資源類型(例如:postalCode、intersection等)。具體可參考Cesium官方文檔。  
};  
viewer.geocoder.geocode(request).then(function(results) {  
    // 地理編碼成功,獲取地理編碼結(jié)果(包含經(jīng)緯度坐標(biāo)等)  
    var position = results[0].position; // 獲取第一個(gè)結(jié)果的經(jīng)緯度坐標(biāo)位置信息,返回一個(gè)Cesium.Cartesian3對象。如果有多于一個(gè)結(jié)果,可以根據(jù)實(shí)際需求進(jìn)行篩選或處理。例如:results[0].entity 等??梢詤⒖糃esium官方文檔了解更多關(guān)于地理編碼結(jié)果的信息。使用經(jīng)緯度坐標(biāo)信息進(jìn)行后續(xù)操作,例如:繪制標(biāo)記點(diǎn)、添加軌跡等。   
});

總結(jié) 

到此這篇關(guān)于前端如何使用Cesium加載三維模型的文章就介紹到這了,更多相關(guān)前端用Cesium加載三維模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中Form表單技術(shù)匯總(推薦)

    JavaScript中Form表單技術(shù)匯總(推薦)

    這篇文章主要介紹了JavaScript中Form表單技術(shù)的相關(guān)資料,包括簡單的表單驗(yàn)證和正則表達(dá)式驗(yàn)證,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • JavaScript繼承的特性與實(shí)踐應(yīng)用深入詳解

    JavaScript繼承的特性與實(shí)踐應(yīng)用深入詳解

    這篇文章主要介紹了JavaScript繼承的特性與實(shí)踐應(yīng)用,結(jié)合實(shí)例形式較為深入的分析了javascript繼承相關(guān)概念、特性、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • js檢測標(biāo)題與描述中的關(guān)鍵詞發(fā)現(xiàn)就替換或跳轉(zhuǎn)到別的頁面

    js檢測標(biāo)題與描述中的關(guān)鍵詞發(fā)現(xiàn)就替換或跳轉(zhuǎn)到別的頁面

    這篇文章主要介紹了js檢測標(biāo)題與描述中的關(guān)鍵詞發(fā)現(xiàn)就替換或跳轉(zhuǎn)到別的頁面的實(shí)現(xiàn)方法,主要是分享它的編程思路與加密方法
    2021-06-06
  • 如何利用模板將HTML從JavaScript中抽離

    如何利用模板將HTML從JavaScript中抽離

    這篇文章主要為大家詳細(xì)介紹了利用模板將HTML從JavaScript中抽離的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • JavaScript數(shù)組操作詳解

    JavaScript數(shù)組操作詳解

    本文主要介紹了JavaScript的數(shù)組操作,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • WebGL學(xué)習(xí)教程之Three.js學(xué)習(xí)筆記(第一篇)

    WebGL學(xué)習(xí)教程之Three.js學(xué)習(xí)筆記(第一篇)

    Three.js是一個(gè)js的開源框架,它把webgl的所有東西都封裝好了,我們不再需要去了解webgl那些比較麻煩的細(xì)節(jié),直接在此框架上進(jìn)行開發(fā),既方便,又快捷,而且很容易就能學(xué)習(xí),感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • JavaScript適配器模式原理與用法實(shí)例詳解

    JavaScript適配器模式原理與用法實(shí)例詳解

    這篇文章主要介紹了JavaScript適配器模式原理與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了JavaScript適配器模式概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • JS常用的4種截取字符串方法

    JS常用的4種截取字符串方法

    在做項(xiàng)目的時(shí)候,經(jīng)常會需要截取字符串,所以常用的方法有slice()、substr()、substring()、match()方法等,下面通過示例代碼介紹四個(gè)方法的使用,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • js 表單提交后按鈕變灰的實(shí)例代碼

    js 表單提交后按鈕變灰的實(shí)例代碼

    這篇文章介紹了js 表單提交后按鈕變灰的實(shí)例代碼,有需要的朋友可以參考一下
    2013-08-08
  • 三種Webpack打包方式(小結(jié))

    三種Webpack打包方式(小結(jié))

    這篇文章主要介紹了三種Webpack打包方式(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論