Демоверсии — Использование — Дорожная карта — Участие — Документы — Альтернативы
Это модуль загрузчика Three.js для обработки 3D-плиток OGC, созданный Cesium. В настоящее время он поддерживает два основных формата:
Внутри загрузчик использует библиотеку loaders.gl, которая является частью платформы vis.gl, которой открыто управляет Urban Computing Foundation. Cesium тесно сотрудничал с loaders.gl для создания независимой от платформы реализации их средства просмотра 3D-плиток.
Разработка этой библиотеки началась в отделе исследований и разработок The New York Times как попытка создать чистый мост между спецификацией 3D Tiles и широко используемой 3D-библиотекой Three.js. Библиотека помогает нам предоставлять обширную 3D- и географическую журналистику как для настольных компьютеров, так и для мобильных устройств. От репортинга к телепортированию !
Вот простой пример использования модуля Loader3DTiles
для просмотра файла tileset.json
содержащего иерархию трехмерных плиток.
import {
Scene ,
PerspectiveCamera ,
WebGLRenderer ,
Clock
} from 'three'
import { Loader3DTiles } from 'three-loader-3dtiles' ;
const scene = new Scene ( )
const camera = new PerspectiveCamera ( )
const renderer = new WebGLRenderer ( )
const clock = new Clock ( )
renderer . setSize ( window . innerWidth , window . innerHeight )
document . body . appendChild ( renderer . domElement )
let tilesRuntime = null ;
async function loadTileset ( ) {
const result = await Loader3DTiles . load (
url : 'https://<TILESET URL>/tileset.json' ,
viewport : {
width : window . innerWidth ,
height : window . innerHeight ,
devicePixelRatio : window . devicePixelRatio
}
options : {
dracoDecoderPath : 'https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/libs/draco' ,
basisTranscoderPath : 'https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/libs/basis' ,
}
)
const { model , runtime } = result
tilesRuntime = runtime
scene . add ( model )
}
function render ( ) {
const dt = clock . getDelta ( )
if ( tilesRuntime ) {
tilesRuntime . update ( dt , window . innerHeight , camera )
}
renderer . render ( scene , camera )
window . requestAnimationFrame ( render )
}
loadTileset ( )
render ( )
Библиотека поддерживает Three.js r160 и использует загрузчики GLTF, Draco и KTX2/Basis. Для определения целевых браузеров обратитесь к полю browserslist
в package.json.
Используйте importmap
для импорта зависимостей из npm. Полный пример см. здесь.
index.html
< script type =" importmap " >
{
"imports" : {
"three" : "https://unpkg.com/[email protected]/build/three.module.js" ,
"three/examples/jsm/" : "https://unpkg.com/[email protected]/examples/jsm/" ,
"three-loader-3dtiles" : "https://unpkg.com/three-loader-3dtiles/dist/lib/three-loader-3dtiles.js"
}
}
</ script >
< script src =' index.js ' type =' module ' >
index.js
import { Scene , PerspectiveCamera } from 'three' ;
import { Loader3DTiles } from 'three-loader-3dtiles' ;
Если вы используете систему сборки, такую как Webpack/Vite/Rollup и т. д., вам также следует установить библиотеку вместе с Three.js из npm:
npm install -s three three-loader-3dtiles
Сценарий приложения будет таким же, как в примере с модулем ES (при использовании importmap
).
Полный пример веб-пакета см. здесь.
Обратитесь к нашему специальному компоненту A-Frame: aframe-loader-3dtiles-comment.
Обратитесь к примерам/r3f.
Спецификация 3D Tiles Next находится в разработке, некоторые функции уже поддерживаются в loaders.gl. Поддержка новых расширений открывает возможности для новых приложений.
Реализация механизма обхода Skip может значительно повысить производительность тайлов b3dm (сетки), но требует реализации на основе буфера шейдера/трафарета, которая вручную управляет Z-отбраковкой. Это очень нужная функция, и мы будем очень признательны за ее вклад.
Обратитесь к CONTRIBUTING.MD за общими инструкциями по вкладу.
Библиотека построена с использованием накопительного пакета. Чтобы запустить простой тип сервера разработки:
npm run dev
Также возможно развитие библиотеки при разработке loaders.gl. Просто клонируйте исходный код loaders.gl и запустите:
LOADERS_GL_SRC=<path to loaders.gl> npm run dev
Чтобы собрать библиотеку, выполните:
npm run build
Чтобы собрать производственную мини-версию, выполните:
npm run build:production
И чтобы создать документацию API, запустите:
npm run docs
Элементарная тестовая спецификация доступна по адресу ./test. Чтобы запустить его, введите:
npm run test
Насколько нам известно, это единственная библиотека Three.js на основе loaders.gl, но существует несколько реализаций 3D Tiles для Three.js. Известные примеры:
Этот репозиторий поддерживается командой исследований и разработок The New York Times и предоставляется «как есть» для вашего собственного использования. Для получения дополнительной информации об исследованиях и разработках в Times посетите сайт rd.nytimes.com.