триплатформировать
Проект по превращению THREE в платформу
Последующее техническое обслуживание продолжится на платформе.
- В настоящее время адаптирован к мини-программам WeChat, Taobao и Byte.
- Поддержка встряхивания дерева (требуется веб-пакет, накопительный пакет и другие инструменты сборки)
- Типы VSCode являются обычными, и к определениям каждого класса можно получить обычный доступ.
- Адаптируйтесь к example/jsm/**/*.js, тип нормальный
- Можно обновить, понизить версию или использовать пользовательскую THREE
- Мини-программа WeChat Оптимизация памяти IOS, меньше сбоев, вызванных переключением страниц
- Поддерживает индивидуальную адаптацию новой платформы, просто обратитесь к WechatPlatform, чтобы написать адаптер.
- Three-platformize-plugin-wechat поддерживает повторное использование плагинов WeChat в разных плагинах.
Специальные спонсоры
Yuntu 3D-Online 3D CAD-программное обеспечение для проектирования | Auburn Future — пионер в области AR/VR |
|
Адаптационная ситуация
| Вичат | Таобао | байт |
---|
Мини-программа настоящая машина | ✔️ | ✔️ | ✔️ |
Мини-программный симулятор | ✔️ | ✔️ | |
Мини-игра настоящая машина | ✔️ | | |
Мини-игровой симулятор | ✔️ | | |
Оберн в будущем набирает специалистов по интерфейсу, WebGL и графическим алгоритмам. Вы можете отправить свое резюме.
ДЕМО
Примечание. При запуске DEMO не забудьте включить режим отладки, отменить проверку доменного имени и использовать последнюю версию инструментов разработки WeChat, чтобы открыть его.
Демо конкретного использования загрузчика находится в этом репозитории в разделе Three-platformize-demo.
ДЕМО Мини-программы WeChat Базовая версия мини-программы WeChat ДЕМО ДЕМО мини-игры WeChat | Мини-программа Taobao ДЕМО | Байтовый апплет DEMO |
---|
| | |
Протестированный модуль
Функции
- VSMShadow (r131 и предыдущие версии в порядке, см. Индекс цикла нельзя сравнивать с непостоянным выражением)
Погрузчик
- GLTLoader (поддерживает текстурированный GLB) && (EXT_meshopt_compression, WASM доступен для Android, версия ASM доступна для ios, см. инструменты) && (KHR_mesh_quantization, доступна для небольших программ) [Оценка сжатия сетки] MeshQuan, MeshOpt, Draco (API WebAssembly отсутствует) больше не доступен после WeChat 8.0. Для использования требуется WXWebAssembly, и он поддерживает только Wasm в пакете. Добавлен Meshopt_decoder.wasm.module, см. использование)
- Загрузчик текстур
- RGBELoader и PMREMGenerator (некоторые модели мини-программы могут иногда генерировать ошибки envMap, которых можно избежать с помощью HDRPrefilter)
- SVGLoader
- OBJLoader
- EXRLoader (должен поддерживать расширение OES_texture_float_linear, некоторые мобильные графические процессоры его не поддерживают)
- MTLLoader (апплет может использовать текстуру JPG)
- DDSLoader (необходима поддержка расширения WEBGL_compressed_texture_s3tc, не поддерживается мобильным графическим процессором)
- LWOLoader (необходима поддержка расширения EXT_blend_minmax, половина эффектов мини программы прорисовывается некорректно)
- FBXLoader
- BVHLoader
- ColladaLoader (DOMParser querySelector не адаптирован)
- ТТФлоадер
- STLLoader
- ПДБлоадер
- TGALoader (используйте DataTextureLoader вместо объединенного PR, доступен r127)
- ВТКЗагрузчик
Элементы управления
- Элементы управления OrbitControl и MapControls
- DeviceOrientationControls (onDeviceMotionChange под мини-программами WeChat и Taobao, качество возвращаемых данных под Android крайне низкое и практически непригодное для использования. Отзыв сообщества об ошибках ведется уже более 3 лет, и чиновник не собирается это исправлять)
Модули не поддерживаются
- ImageBitmapLoader (апплет WeChat не открывает ImageBitmap)
Инструменты
- распорядиться-три (уничтожить узел
- перевернуть (для скриншота требуется перевернуть Y
- скриншот
- worker-pool.module (пока не адаптирован к апплету WeChat)
- zstddec.worker.module (пока не адаптирован к апплету WeChat)
- zstddec.module (пока не адаптирован к апплету WeChat)
- toEnvMap (для префильтра hdr
- meshopt_decoder.asm.module (доступен в апплете WeChat)
- meshopt_decoder.wasm.module (доступен в апплете WeChat)
Расширения
- GLTFGPUCompressedTexture (альтернатива BasisTextureLoader). Инструмент генерации получается через gltf-gpu-compressed-texture (пока не адаптированный к апплету WeChat).
использовать
import * as THREE from 'three-platformize' ;
import WechatPlatform from 'three-platformize/src/WechatPlatform' ;
const platform = new WechatPlatform ( canvas ) ; // webgl canvas
platform . enableDeviceOrientation ( 'game' ) ; // 开启DeviceOrientation
THREE . PLATFORM . set ( platform ) ;
// 使用完毕后释放资源
THREE . PLATFORM . dispose ( ) ;
// 正常使用three即可
// DEMO 代码示例见 https://github.com/deepkolos/three-platformize-demo
// 基础的使用DEMO见 https://github.com/deepkolos/three-platformize-demo-wechat-simple
// 生产环境时rollup.config.js里请开启teser压缩, 即plugins末尾增加 terser({ output: { comments: false } })
опыт
- Апплет WeChat не поддерживает изображения текстур выше 2048.
- Возникла проблема с апплетом Taobao, отображающим текстуры в формате RGB (JPG). После загрузки текстуры через TextureLoader установите для параметра text.format значение RGBAFromat (версия Taobao 9.20.0). Причина может заключаться в том, что сервер оптимизирует большие изображения и сжимает их. Изображения Меняет формат с RGB на RGBA.
- r126 не может установить полное соотношение пикселей, его можно установить на половину или 2, а не 3.
- Хотя он поддерживает загрузку GLB, изображение преобразуется в base64 с использованием js-версии ArrayBuffer, что отнимает много времени и памяти. Хотя это можно облегчить с помощью кодировщика Wasm (https://github.com/marcosc90/encoding-). Wasm), Wasm не обрабатывает строки. Производительность не такая хорошая, как у js, протестировано с помощью Wasm, скомпилированного с помощью AssemblyScript.
- Сбой IOS до и после входа и выхода из страницы может уменьшить PixelRatio и облегчить его
- IOS WeChat readPixels не поддерживает сглаживание. Если буферу прямого холста необходимо отключить сглаживание (antialias: false), можно также включить другой метод — WebglRenderTarget, но размер текстуры ограничен. (ширина/высота текстуры под Xiaomi 8. Она не может превышать 4096, сначала нужно обратить внимание на setSize, затем на setPixelRatio) (демо-скриншот см. в ДЕМО-апплете WeChat)
- Мини-программа Taobao имеет строгую проверку доменного имени и может использовать облачное хранилище для хранения моделей. Однако, если модель и текстура разделены, рекомендуется связать GLB.
- Полифил URL-адреса может использовать fileSystemManager для получения временных файлов, чтобы избежать преобразования arraybuffer в base64, но для этого требуется ручное управление временными файлами.
- Некоторые студенты из группы QQ сообщили, что путь к файлу модели в апплете Taobao для iOS не поддерживает китайский язык.
выполнить
Заменяйте вызовы API, специфичные для платформы, во время сборки, пересылайте ссылки на PLATFORM и обновляйте через PLATFORM.set.
поддерживать
Как обновить/понизить версию Three?
# 拉取源码
> git clone https://github.com/deepkolos/three-platformize
# 安装依赖
> npm i
# 更新到最新的three版本
> npm i -S three@latest
# 或者指定three版本
> npm i -S [email protected]
# 需要把目标three的构建`utils/build/rollup.config.js`同步到本项目的构建`config/rollup.config.three-origin.js`
# 建立软链接
> npm run link
# 构建
> npm run build
# 使用
> npm link
# 到使用的项目目录,并链接
> cd your-project
> npm link three-platformize
# 或者自行发NPM包
Как настроить платформу Three?
# 把自定义Three link 到./three
> npx symlink-dir yourthree ./three
# 不使用软链接直接复制或者git submodule也可以
> cp yourthree ./three
# 复制对应版本three构建配置替换到rollup.config.three-origin.js
> cp yourthree/utils/build/rollup.config.js ./config/rollup.config.three-origin.js
# 构建
> npm run build
Как написать собственную платформу?
Пожалуйста, обратитесь к src/WechatPlatform
или src/TaobaoPlatform
class CustomPlatform {
getGlobals ( ) {
// 自定义的polyfill
return {
atob ,
Blob ,
window ,
document ,
XMLHttpRequest ,
OffscreenCanvas ,
HTMLCanvasElement ,
createImageBitmap ,
} ;
}
setWebGLExtensions ( ) {
return {
// 可覆盖gl返回值,比如淘宝小程序IOS返回值不为null,但是扩展不可用的bug
EXT_blend_minmax : null ,
} ;
}
dispose ( ) {
// 释放资源
}
}
TODO
- Удалить более тщательно, уменьшить утечки памяти, добавлены веб-тестовые примеры, добавлен апплет WeChat, в IOS по-прежнему возникают проблемы с памятью, страница по-прежнему вылетает после многократного переключения, модель iPhone7 объемом 3 МБ открывается 30 раз
- Адаптация к апплету Toutiao завершена
- Создавайте плагины WeChat и реализуйте повторное использование кода в мини-программах, а также перекрестные плагины мини-программ с помощью плагинов, выполненных с использованием трех платформ-плагинов-wechat.
- Мини-игра «Адаптация к WeChat» завершена.
- Адаптироваться к ReactNative
обсуждать
Вы можете связаться со мной через группу DeepKolos
ИЗМЕНЕНИЯ
спонсор
Если проект полезен для вас или нуждается в адаптации, оставьте чаевые.
Спасибо за вашу поддержку~~
время | Босс |
---|
10.11.2021 | бог бог |
27.09.2021 | Абу |
10.08.2021 | Обернское будущее |
28.07.2021 | Ничего |
09.07.2021 | анонимный |
07.07.2021 | Облачный CAD-Лю Синь |
2021/06/23 | Фонг |
2021/06/23 | Лю Цзыци |
2021/06/23 | Джосон |
03.06.2021 | Бионический Вольтер |
28.04.2021 | Ничего |