2015-01-12 1 views
1

Я представил некоторые 3D-объекты (модели JSON и OBJ) в структуре Three.js. Теперь мне нужно отобразить сцену в рамках цезия на основе координат геоданных.Как интегрировать three.js в цезий или наоборот?

Кто-нибудь пробовал это раньше? Было бы полезно, если бы кто-то мог поделиться некоторыми статьями или примерными приложениями на этом (т. Е. Интегрировать цезий и три.js).

ответ

2

Этот вопрос довольно стар, и в то время как цезий и Three.js разработали гораздо более сильную поддержку для формата 3D модели под названием glTF, которая опирается группой Khronos (в WebGL стандарты). Теперь это предпочтительный способ рендеринга ваших 3D-моделей (по крайней мере, в цезие).

Цезий не может поддерживать прямую интеграцию с Three.js, частично потому, что два продукта имеют очень разные двигатели рендеринга под капотом. Three.js стремится к гибкости и простоте использования, в то время как Цезий стремится к точности в масштабе планеты или более крупном рендеринге. Многие из шейдеров цезия выполняют 64-битную математику с данными о местоположении (используя отдельные 32-битные «высокие» и «низкие» атрибуты, for example), которые необходимы для точности миллиметрового уровня на планете шириной 13000 км. Цезий также имеет систему использования multiple view frustums, которая обеспечивает рендеринг размера солнечной системы (например, ближайшая ближайшая плоскость 1 метр или менее, самая дальняя дальность полета 1e11 км или более. Это не работает за один проход на типичном Буфера глубины WebGL, поэтому цезий разрезает общий объем просмотра на 3 или 4 части, чтобы сделать это).

Обычно я предлагаю вам выбрать правильный механизм рендеринга для заданий, которые вы пытаетесь сделать, используя знания об относительных функциях и силе доступных движков. Я не думаю, что попытка объединить два двигателя вместе - правильный ответ.

+0

Я принял подход к преобразованию файла collada в gLTF и загрузке их на Cesium. Я полагаю, что играю с Geo-координатами, например, в режиме реального времени, отслеживая транспортные средства и так далее. Таким образом, лучшим выбором был цезийный двигатель. И я с этим справляюсь. Цените свое время, чтобы ответить на мой старый пост и спасибо за предложение. –

1

Нет единого ответа для того, что вы хотите сделать, и без поддержки в любом проекте. Теоретически должно быть возможно написать обертки вокруг различных трех объектов и превратить их в эквиваленты цезия. (Например, Three.Mesh может легко сопоставить Cesium.Pimitive.) Тот факт, что никто еще не сделал этого пока (насколько мне известно), заставляет меня подозревать, что он имеет ограниченную полезность. (Хотя я думаю, что три адаптера были бы классными в любом случае)

В большинстве случаев, вероятно, проще просто отбросить three.js и сделать все в цезие. Например, использование BoxGeometry из цезия вместо Three.BoxGeometry.

1

Чтобы добавить .obj к цезию, вы можете использовать блендер, чтобы экспортировать 3d модель в виде файла Collada .dae, Затем используйте «Collada для gltf» преобразователя на [http://cesiumjs.org/convertmodel.html] , чтобы преобразовать его в .glb (gl бинарный)

И затем в вашем html вы можете добавить свой объект в качестве объекта для зрителя. например,

var building = viewer.entities.add({ 
    position: Cesium.Cartesian3.fromDegrees(-1.679800, 51.997300, 180.75), 
    model: { 
       uri: '/models/myBuilding.glb', 
       minimumPixelSize: 64 
      } 
     });