XGRIDSDocs
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Seria Lixel PortalCam

    • PortalCam P1

      • Przegląd produktu
      • Podstawowa obsługa
      • Korzystanie z aplikacji LCC Scan
      • Konserwacja i pielęgnacja
      • FAQ
  • Seria Lixel K

    • Lixel K1

      • Przegląd produktu
      • Podstawowa obsługa
      • Aktywacja i połączenie urządzenia
      • Przebieg skanowania
      • Pozyskiwanie danych chmury punktów ze współrzędnymi bezwzględnymi
      • Fuzja map
      • Zalecenia dotyczące planowania trasy dla typowych scen
      • Środki ostrożności
      • FAQ
    • Lixel K2

      • Przegląd produktu
      • Podstawowa obsługa
      • Aktywacja i połączenie urządzenia
      • Przebieg skanowania
      • Pozyskiwanie danych chmury punktów ze współrzędnymi bezwzględnymi
      • Fuzja map
      • Zalecenia dotyczące planowania trasy dla typowych scen
      • Środki ostrożności
      • FAQ
  • Seria Lixel L

    • Lixel L2 Pro

      • Przegląd produktu
      • Podstawowa obsługa
      • Aktywacja i połączenie urządzenia
      • Proces skanowania
      • Pozyskiwanie danych chmury punktów ze współrzędnymi bezwzględnymi
      • Punkt pomiarowy
      • Dodatek
      • FAQ
    • Lixel L3

      • Przegląd produktu
      • Podstawowe funkcje urządzenia
      • Aktywacja i połączenie urządzenia
      • Przechwytywanie danych
      • Przechwytywanie współrzędnych bezwzględnych
      • Dodatek
  • Akcesoria

    • Stick Light

      • Przewodnik instalacji
      • Podstawowa obsługa
      • Często zadawane pytania
  • Lixel Studio

    • Wersja i prawa autorskie
    • Instalacja i aktywacja
    • Interfejs oprogramowania
    • Operacje na plikach
    • Przetwarzanie projektu
    • Narzędzia
    • Rysowanie 2D
    • Zastosowania
    • Ustawienia
    • Połączenie z urządzeniem
  • 07-plugin-sdk

    • Unity

      • Wprowadzenie do Unity SDK
      • Funkcje techniczne
      • Wymagania środowiska deweloperskiego
      • Przewodnik szybkiego startu dla PC
      • Przewodnik optymalizacji ustawień projektu
      • Przewodnik deweloperski dla Pico 4 Ultra
      • Przewodnik strumieniowania PC dla Pico 4 Ultra
      • Przewodnik deweloperski dla Quest 3
      • Przewodnik strumieniowania PC dla Quest 3
      • Przewodnik deweloperski dla OpenXR
      • Przewodnik Business Streaming dla Pico 4 Ultra
      • Słownik
      • Często zadawane pytania (FAQ)
      • Skontaktuj się z nami
      • Przewodnik programowania funkcji

        • Przewodnik mieszanego renderowania wielu scen
        • Przewodnik odbierania cieni
        • Przewodnik oświetlenia w czasie rzeczywistym
        • Przewodnik renderowania wielokamerowego
        • Przewodnik renderowania obrazów wysokiej rozdzielczości
        • Przewodnik zgodności formatów danych LCC i LCC2
        • Przewodnik efektu ładowania
        • Przewodnik przełączania trybu renderowania Mip
        • Przewodnik przyciągania do krawędzi i narożników
        • Przewodnik dekala projekcyjnego
        • Przewodnik wideo dekala projekcyjnego
        • Przewodnik podświetlania
        • Przewodnik przycinania w czasie rzeczywistym
        • Przewodnik korekcji kolorów
        • Przewodnik pobierania danych siatki sceny
        • Przewodnik trybu edytora
        • Przewodnik konfiguracji parametrów wydajności renderowania
        • Przewodnik współpakowania aplikacji i danych
        • Przewodnik systemu kolizji
        • Przewodnik problemów z uprawnieniami w deweloperstwie na macOS
        • Przewodnik kompilacji i pakowania na urządzenia iOS
      • Dokumentacja API

        • LCCManager
        • Renderer
        • Typy danych
      • Dziennik zmian

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14

Przewodnik zgodności formatów danych LCC i LCC2

Format danych LCC2 zapewnia lepszą kompresję danych i mechanizmy LOD. Oryginalny format LCC będzie stopniowo zastępowany przez LCC2, a oryginalny LCC SDK (v1.x) stopniowo przestanie być utrzymywany. Ponieważ stary i nowy format danych znacznie się różnią, nowy LCC SDK (v2.x) nie jest wstecznie zgodny z formatem LCC. Zgodność danych można osiągnąć na dwa poniższe sposoby:

  1. Użyj oficjalnego konwertera (LccConverter) exe/dll, aby przekonwertować format danych LCC na LCC2, a następnie użyj go w SDK;
  2. Zaimplementuj zgodność formatów danych LCC i LCC2 na warstwie aplikacji.

Ten przewodnik głównie opisuje przepływ i kroki implementacji zgodności formatów danych na warstwie aplikacji, to znaczy importowanie dwóch wersji SDK do tego samego projektu Unity jednocześnie i automatyczny wybór odpowiedniej wersji do renderowania i przetwarzania na podstawie formatu danych.

Krok 1: Wersja Unity i ustawienia projektu

Wersja Unity i ustawienia projektu są takie same jak przy samodzielnym użyciu SDK; nie jest wymagana żadna dodatkowa konfiguracja. Zobacz Przewodnik szybkiego startu dla PC i Przewodnik optymalizacji ustawień projektu.

Krok 2: Zaimportuj dwie wersje SDK

Zaimportuj SDK v1.4.8 i nowsze (zalecane v1.4.32) oraz SDK v2.0.1 i nowsze przez Unity UPM. Po zaimportowaniu wersja v1.x będzie wyświetlana jako Legacy. Dwie wersje SDK mogą współistnieć bez wzajemnego wpływu.

Uwaga:

  • SDK v1.4.32 można pobrać z GitHub: https://github.com/xgrids/LCC-Unity-SDK/releases
  • Przestrzeń nazw SDK v1.4.32 to LCCCore_Legacy, a jego komponent menedżera to LCCManager_Legacy; przestrzeń nazw v2.x to LCCCore, a jego komponent menedżera to LCCManager.

Krok 3: Skonfiguruj scenę

Utwórz pusty obiekt w scenie o nazwie LCCController i dołącz do niego komponenty LCCManager_Legacy oraz LCCManager.

Dołącz komponenty LCCManager_Legacy i LCCManager do obiektu LCCController

Dołącz komponenty LCCManager_Legacy i LCCManager do obiektu LCCController

Uwaga:

Ustawienia Transform GameObject LCCController (Rotation.x = -90, Scale.x = -1) wyrównują go z układem współrzędnych danych LCC. Szczegóły wyrównania układu współrzędnych znajdziesz w sekcji „Układ współrzędnych danych LCC" w Wprowadzenie do Unity SDK.

Krok 4: Napisz skrypt MultiSDKController

Utwórz nowy skrypt C# o nazwie MultiSDKController.cs z następującym kodem:

using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // dla LCC SDK v1.4.8 i wcześniejszych
    public LCCManager m_manager;                       // dla LCC SDK v2.0.0 i nowszych
    public string m_FilePath;                          // ścieżka pliku LCC
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // dla LCC SDK v1.4.8 i wcześniejszych
    private LCCCore.Renderer m_renderer;               // dla LCC SDK v2.0.0 i nowszych
    private DataType m_dataType;                       // typ danych, używany do określenia, którego SDK użyć

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // wyłącz menedżera v2.0.0+
            m_dataType = DataType.LCC;
            m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
            m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
        }
        else if (extension == ".lcc2")
        {
            m_managerLegacy.Enable = false; // wyłącz menedżera v1.4.8 i wcześniejszych
            m_dataType = DataType.LCC2;
            m_renderer = m_manager.GetRender(this.transform);
            m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
        }
    }

    private void onLoadCallback()
    {
        Debug.Log("dane załadowane !!!");
    }

    // Przykład wywołania metody: określ, na którym rendererze SDK operować, według typu danych
    public void onRenderPointClick()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
        else if (m_dataType == DataType.LCC2)
            m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
    }

    void OnDestroy()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy?.Dispose();
        else if (m_dataType == DataType.LCC2)
            m_renderer?.Dispose();
    }

    public enum DataType { LCC, LCC2 }
}

Uwaga:

  • Nazwa pliku skryptu musi być zgodna z nazwą klasy (MultiSDKController.cs odpowiada class MultiSDKController), w przeciwnym razie nie można go dołączyć do GameObject.
  • Dwie wersje mają różne przestrzenie nazw (LCCCore i LCCCore_Legacy). Używając typów o tych samych nazwach, takich jak Renderer, PlatformType i RenderMode, musisz poprzedzić je przestrzenią nazw, aby je rozróżnić.
  • Przykład określa format danych według rozszerzenia pliku (.lcc / .lcc2) i wybiera odpowiednią wersję SDK.

Krok 5: Dołącz skrypt i ustaw właściwości

  1. Dołącz również skrypt MultiSDKController.cs do obiektu LCCController w scenie.
  2. W oknie Inspektor przeciągnij komponenty LCCManager i LCCManager_Legacy na odpowiednie właściwości skryptu.
  3. Wpisz ścieżkę pliku LCC / LCC2 we właściwości File Path skryptu.
Dołącz skrypt MultiSDKController i ustaw jego właściwości

Dołącz skrypt MultiSDKController i ustaw jego właściwości w Inspektorze

Teraz, gdy uruchomisz kod, odpowiednia wersja SDK jest automatycznie używana do renderowania na podstawie formatu danych LCC, osiągając zgodność formatów danych.

Kluczowe kroki

Kluczowe kroki implementacji zgodności formatów danych LCC i LCC2 na warstwie aplikacji:

  1. Zaimportuj obie wersje SDK — v1.x (Legacy) i v2.x — przez UPM; obie mogą współistnieć.
  2. Dołącz komponenty menedżera LCCManager_Legacy i LCCManager do tego samego obiektu.
  3. Wybierz menedżera odpowiedniej wersji, aby utworzyć renderer i załadować dane na podstawie formatu danych (rozszerzenie pliku .lcc / .lcc2).
  4. Po określeniu, której wersji użyć, wyłącz menedżera drugiej wersji (Manager.Enable = false).
  5. Przy przełączaniu danych lub niszczeniu zwolnij aktualnie renderowane dane przez Renderer.Dispose().

Uwagi dotyczące zgodności formatów danych

  • Jednoczesne renderowanie LCC i LCC2 nie jest obsługiwane. Dlatego przy przełączaniu danych musisz najpierw zwolnić aktualnie renderowane dane (wywołaj Renderer.Dispose()), w przeciwnym razie może to spowodować wycieki pamięci i pamięci wideo.

  • Wyłącz nieużywanego menedżera. Po określeniu, której wersji SDK użyć, najlepiej wyłączyć obiekt menedżera drugiej wersji SDK (Manager.Enable = false), w przeciwnym razie może to powodować pewien nieefektywny narzut wydajności.

  • Interfejsy API są spójne, ale musisz wywołać prawidłowy Renderer. Interfejsy API dwóch wersji SDK są dokładnie takie same (w v2.x wiele API zostało przeniesionych do klasy Manager; zobacz podręcznik API), ale musisz upewnić się, że wywołujesz Renderer prawidłowej wersji (m_rendererLegacy lub m_renderer). Ponadto v2.0.0 i nowsze nie obsługują już zapisywania korekcji kolorów i przycinania danych, a niektóre inne API również są przestarzałe; sprawdź dokumentację deweloperską odpowiedniej wersji.

Powiązane API

To rozwiązanie obejmuje głównie API menedżera i renderera dwóch wersji SDK. Poniżej jako przykład użyto v2.x (LCCCore); v1.x (LCCCore_Legacy) ma ten sam interfejs, różni się tylko przestrzenią nazw.

LCCManager.Enable

// Właściwość
public bool Enable { get; set; }

Przełącznik włączania menedżera. Ustawienie false wyłącza menedżera tej wersji SDK, unikając nieefektywnego narzutu wydajności wynikającego z jednoczesnej pracy z drugą wersją.

Przykład użycia:

// Gdy używasz danych LCC2, wyłącz menedżera Legacy
m_managerLegacy.Enable = false;

Uwagi:

  • Po określeniu, której wersji użyć, zaleca się wyłączenie menedżera drugiej wersji.

GetRender

// Wartość zwracana: Renderer → instancja renderowania, null przy niepowodzeniu
public Renderer GetRender(Transform _transform)

Tworzy instancję renderowania i wiąże ją z określonym Transform.

ParametrTypOpis
_transformTransformTransform, do którego dołączona jest instancja renderowania

Przykład użycia:

m_renderer = m_manager.GetRender(this.transform);

Uwagi:

  • Musi być tworzona przez menedżera odpowiedniej wersji, aby renderer pasował do formatu danych.

Renderer.Dispose

// Wartość zwracana: void
public void Dispose()

Niszczy instancję renderowania i zwalnia wszystkie zasoby GPU oraz pamięć. Instancja nie może być ponownie użyta po zniszczeniu.

Przykład użycia:

m_renderer?.Dispose();

Uwagi:

  • Przed przełączeniem danych musisz najpierw zwolnić aktualne dane, w przeciwnym razie może to spowodować wycieki pamięci i pamięci wideo.
  • Po wywołaniu automatycznie powiadamia menedżera o usunięciu odniesienia.
  • Zaleca się wywołanie przy niszczeniu obiektu (OnDestroy).