Guia de desenvolvimento do Snapdragon Spaces (13)


6.3.2.2 Interação de rastreamento manual

Esta seção descreve os diferentes atores e componentes necessários para interagir com o rastreamento manual.

AVISO
A interação de rastreamento manual é usada não apenas na amostra de rastreamento manual, mas em todas as amostras do projeto. Isso permite que os usuários interajam com personagens widget e personagens 3D que podem interagir com rastreamento manual.

6.3.2.2.1 Função de gerenciador de entrada de gestos espaciais

Esta é uma função muito importante a ser usada em interações de rastreamento manual. Para definir o rastreamento manual como modo de entrada, este caractere precisa ser adicionado ao nível. Recomenda-se usar o nó Spawn Actor da classe para gerar este personagem.

insira a descrição da imagem aqui

Aviso
Certifique-se de verificar se o rastreamento manual está disponível antes de adicionar ou gerar este personagem em um nível.insira a descrição da imagem aqui

O ator Control Gesture Input Manager é responsável por ouvir gestos em tempo real e relatar ações com base nesses gestos usando delegados. Ele gera e segura ASpacesHandInteractiondois participantes da turma, um para cada mão, necessária para realizar a interação. As seções a seguir listam as diferentes variáveis ​​e funções que podem ser acessadas e usadas nesta classe.

6.3.2.2.1.1 Variáveis
  • FOnSpacesHandPinch OnSpacesHandPinchLeftE FOnSpacesHandPinch OnSpacesHandPinchRight: dispara o delegado para notificar o estado do gesto de pinça.
  • FOnSpacesHandOpen OnSpacesHandOpenLefte FOnSpacesHandOpen OnSpacesHandOpenRight: Dispara o delegado para ser notificado sobre o estado do gesto de pinça.
  • FOnSpacesHandGrab OnSpacesHandGrabLeftAND FOnSpacesHandGrab OnSpacesHandGrabRight: Dispara o delegado para notificar o estado do gesto Grab.
  • FOnSpacesHandInteractionStatusUpdated OnSpacesHandInteractionStatusUpdated: um delegado acionado quando o estado de interação manual é atualizado, ele notifica o estado com um valor booleano.
  • TSubclassOf < ASpacesHandInteraction > HandInteractionClass: 空间手部交互角色uma subclasse gerada como um caractere de interação manual.
  • FVector LeftRayPositionOffsete FVector RightRayPositionOffset: deslocamentos de luz para dois personagens que interagem com as mãos.
  • float RayDistance: A distância da luz entre os dois personagens que interagem com as mãos.
6.3.2.2.1.2 Funções
  • ASpacesHandInteraction* GetHandLeftInteraction() conste ASpacesHandInteraction* GetHandRightInteraction() const: Usado para obter caracteres de interação manual.
  • void SetHandInteractionState(bool active): Usada para ativar ou desativar a interação manual, esta função afetará todos os sistemas de interação manual. A interação manual está desativada por padrão.
  • void GetHandInteractionState() const: Retorna o estado do sistema de interação manual.

DICA
Consulte BP_HandTrackingControllerComponent(em SnapdragonSpacesSamples Content > SnapdragonSpaces > Common > Core > Components) para aprender como usar gestos de controle para entrar na função de gerente.

6.3.2.2.2 Caractere de interação espacial das mãos

Spaces Hand InteractionOs personagens são responsáveis ​​por interagir com os diferentes elementos interativos manuais presentes no nível, como widgets 3D e outros tipos de personagens. Personagens de interação com as mãos espaciais incluem interações com mãos distantes (que realizam raycasts em elementos da cena) e interações com mãos próximas (que são ativadas quando uma mão é tocada em um personagem interativo). Os caracteres de interação espacial da mão serão representados por um raio que começará na mão especificada pelo usuário. Este raio é sempre visível, a menos que seja usada interação próxima. As luzes têm dois modos de interação: ativo (quando o raio atinge qualquer personagem interativo com as mãos na cena) ou inativo. A cor e o comprimento da luz mudarão de acordo com esses dois modos. Para interagir com a IU, use a interação remota e gestos de pinça.

DICA
No projeto de amostra Snapdragon Spaces para Unreal Engine, 手势输入管理器são gerados dois tipos de atores 空间手部交互, um para cada mão, o que significa que 手势输入管理器basta adicioná-los à cena.

insira a descrição da imagem aqui
As seguintes variáveis ​​e funções podem ser usadas para personalizar o caractere Spatial Hand Interaction.

6.3.2.2.2.1 Variáveis
  • float LerpFactor: Ajusta a velocidade de translação e rotação do personagem.
  • float LerpFactor: Ajusta a velocidade de escala do personagem.
  • floatMinimumScaleFactor: O fator de escala mínimo que pode ser aplicado ao personagem.
  • float MaximumScaleFactor: O fator de escala máximo que pode ser aplicado ao personagem.
  • bool bApplyTranslation: Indica se o caractere deve ser traduzido.
  • bool bApplyRotation: Indica se o personagem deve ser girado.
  • bool bApplyScale: Indica se o caractere deve ser dimensionado.
  • FOnSpacesHandInteractableStateChanged OnSpacesHandInteractableStateChanged: O delegado/despachante que comunica o estado da interação manual por meio do ator, usando ESpacesHandInteractableStatea enumeração para retornar o estado (veja como essa enumeração funciona no exemplo de código abaixo).
UENUM(BlueprintType, Category = "Snapdragon Spaces Hand Interaction")
enum class ESpacesHandInteractableState : uint8
{
    
    
    Focused = 0,
    Grabbed = 1,
    UnFocused = 2
};

Um exemplo de uso deste componente está localizado BP_SpacesHandInteractableCubeno Blueprint Actor, na pasta de plug-ins SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > HandTracking > Placeable > InteractableObjects.

insira a descrição da imagem aqui

6.3.2.2.3 Componentes de Volume de Captura Espacial

O componente Spaces Snapping Volume é herdado do componente Unreal Engine Box(abre uma nova janela). É usado principalmente para SpacesHandInteractionajustar a extremidade do raio de um caractere a uma posição desejada dentro de outro caractere. Isso é especialmente útil para componentes de widget 3D interativos, como botões, caixas de seleção ou controles deslizantes, mas pode ser usado com qualquer tipo de personagem 3D. Este componente pode ser adicionado dentro do personagem e deve ser colocado manualmente onde desejar, por exemplo, em cima de um botão em um widget 3D, conforme imagem abaixo.

insira a descrição da imagem aqui

Aviso
Ao usar este componente com UI, é importante seguir as seguintes diretrizes:

  • A posição e o tamanho da caixa devem corresponder ao formato do componente do widget 3D, caso contrário, poderão aparecer efeitos indesejados, como cintilação ao emitir raios fora do caractere do widget 3D.
  • A orientação do eixo X do componente deve corresponder à orientação do componente do widget 3D. Isso é necessário para interagir adequadamente com os componentes do widget.

Para personalizar o comportamento deste componente, diferentes variáveis ​​e funções estão disponíveis.

6.3.2.2.3.1 Variáveis
  • bool bSnap: determina se o componente será usado para ajuste. Um cenário possível para usar este componente sem o ajuste ativado é um controle deslizante de widget 3D. Neste caso, não é possível encaixar a extremidade do raio na alça do controle deslizante, mas a visualização do raio na mão é necessária para a experiência do usuário.
  • bool bIsUI: esta opção deve ser habilitada quando o componente for usado para interação do componente UI do widget 3D. Ele pode ser desativado para uso por qualquer outro participante.
  • bool bIsDisabled: determina se a colisão de componentes está ativa desde o início. Por padrão, será falso.
6.3.2.2.3.1 Funções
  • void SetCollisionDisabledState(bool disabled): usado para definir o valor de bIsDisabled.
  • void UpdateCollisionStatus(bool active): atualize o estado de colisão do componente. Se bIsDisabled for verdadeiro, as colisões serão desabilitadas independentemente dos valores de entrada da função.
6.3.2.2.4 O papel da caixa de interação remota espacial

BP_SpacesDistalInteractionBoxPermite girar e dimensionar os participantes usando interação remota. Para utilizá-lo, ele deve ser adicionado como um componente sub-Ator dentro do Ator para manipulação. Encontrado em SnapdragonSpaces Content > Hand Tracking > Actors BP_SpacesDistalInteractionBox. BP_PandaInteractablePara ver um exemplo de como adicionar um BP_SpacesDistalInteractionBox a outro ator, consulte Atores localizados em SnapdragonSpacesSamples Content > Snapdragon Spaces > Samples > HandTracking > Placeable > InteractableObjects . A Caixa de Interação Remota consiste em diferentes Spaces Distal Manipulator Actorinstâncias, cada uma das quais pode ser chamada de "ponto de manipulação". Spaces Distal Manipulator ActorExistem dois tipos diferentes, nomeadamente Spaces Distal Scale Pointe Spaces Distal Rotation Point. Dependendo da peça na caixa, o ponto de ação se comportará de maneira diferente. Os pontos de manipulação na borda da caixa servem para alterar a escala do personagem, os demais pontos de manipulação realizarão diferentes rotações e dependendo de sua posição na caixa estarão no plano X, Y ou Z. Use gestos de pinça para interagir com a caixa de interação.

insira a descrição da imagem aqui

6.3.3 Teste de acerto

6.3.3.1 Exemplo de teste de acerto

Este exemplo demonstra como atingir pontos de teste e aviões encontrados no mundo real. Para obter informações básicas sobre testes de acerto e 跟踪对象 3Dos recursos do nó Wire Tracing do Unreal Engine (foto abaixo), consulte a documentação do Unreal Engine (abre em uma nova janela). Para usar este recurso, ele deve ser habilitado nas configurações do plugin OpenXR em Configurações do projeto > Plugin Snapdragon Spaces. Além disso, 平面检测o recurso deve estar habilitado para que o teste de acerto funcione corretamente. Para acertos mais precisos, ative a opção Usar detecção de casco convexoAR 会话配置 do recurso Detecção de plano em

insira a descrição da imagem aqui

6.3.3.1.1 Como funciona o exemplo

Quando a amostra é aberta, o gizmo está sempre na frente do usuário e cada atualização inicia o raycast. Se retornar um resultado de acerto bem-sucedido, o gizmo se moverá para a pose de acerto e será exibido em ciano, amarelo e magenta. Se nenhum acerto for detectado, o gadget se moverá um metro à frente da pose da cabeça e ficará vermelho.

6.3.3.1.2 Gerenciador de hits

A amostra usa BP_HitManagero ativo Blueprint (encontrado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > HitTesting > Placeable) para lidar com testes de acerto no mapa de amostra. Para ativar e desativar o teste de acerto, Toggle Spaces Featureo método deve ser usado com o teste de acerto como uma função. Os desenvolvedores têm várias opções para personalizar os raios usados ​​nos testes de acerto:

  • Distância Ray Cast : O comprimento do raio.
  • GizmoTag : BP_Pawno nome da tag definida no SceneComponent para posicionamento (também chamado de gizmo branco no exemplo).
  • Distância Gizmo : A distância da pose da cabeça até o objeto colocado.

6.3.4 Rastreamento de Imagens

6.3.4.1 Exemplo de rastreamento de imagem

Este exemplo demonstra como detectar e aumentar objetos de imagem encontrados no mundo real.

Para obter informações básicas sobre como personalizar atualizações de objetos rastreáveis ​​e a funcionalidade dos componentes do Unreal Engine AR Trackable Notify, consulte a documentação do Unreal Engine (abre uma nova janela). Para usar este recurso, ele deve ser habilitado nas configurações do plugin OpenXR em Configurações do projeto > Plugin Snapdragon Spaces.

6.3.4.1.1 Como funciona o exemplo

Por padrão, quando o exemplo é executado e reconhece uma imagem, ele gera um gizmo no destino físico. Atualmente, o exemplo reconhece apenas uma imagem e exibe sua posição mundial em um painel de IU incluído no mapa.

insira a descrição da imagem aqui

6.3.4.1.2 Gerenciador de AR de imagem

BP_ImageTrackingManagerO ativo Blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable) lida com BP_Gizmo_AugmentedImagea criação e destruição de personagens por meio do sistema de eventos. Ele vincula eventos do componente AR Trackable Notify (abre uma nova janela) para reagir às alterações na imagem do AR Trackable. Quando o sistema detecta uma imagem, ele chama eventos de adição/atualização/exclusão de imagem de rastreamento . No exemplo do Blueprint, isso Toggle AR Capturedeve ser definido como ON se a detecção for iniciada e OFF se for parar a detecção de objetos e destruir todas as imagens AR geradas . Pode ser usado como uma alternativa para ativar esse recurso. Além disso, Scene Understanding deve ser definido como o tipo de captura para este nó.Toggle AR Capture切换空间功能

6.3.4.1.3 Configuração da sessão de AR de imagem

O sistema começa D_SpacesSessionConfig_ImageTrackinga detectar imagens usando o recurso (encontrado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Core). Este recurso é SpacesSessionConfigum recurso de dados derivado da classe.

Um arquivo de configuração de sessão fornece três campos: um para definir o tamanho da imagem, um para especificar o número máximo de imagens simultâneas que devem ser rastreadas e um para fazer referência a imagens candidatas a serem rastreadas.

A criação do rastreador de imagens ocorre em um thread assíncrono para evitar problemas de congelamento quando o número de imagens a serem rastreadas é muito grande. Portanto, às vezes o rastreamento de imagem pode demorar para ser iniciado. Ouça os On Spaces Image Tracking Is Readyeventos delegados para determinar quando as imagens podem começar a ser rastreadas.

insira a descrição da imagem aqui

6.3.4.1.4 Imagens candidatas de AR

O Unreal Engine usa um tipo de ativo especializado chamado AR Candidate Image (abre uma nova janela). Cria uma referência à imagem que o sistema XR deve rastrear. Os desenvolvedores podem adicionar quantos quiserem AR 候选图像e atribuí-los ao AR 会话配置array indicado em .

Para criar AR 候选图像, a imagem a ser rastreada deve primeiro ser importada para o projeto da pasta Conteúdo como um ativo de textura. O recurso de textura criado deve definir UserInterface2D (RGBA) nas configurações de compactação, e é recomendado desligar o mapa mip.

insira a descrição da imagem aqui

DICA
Você pode encontrar as imagens de referência usadas na seção Destinos de imagem para teste

A próxima etapa é criar AR 候选图像o recurso, e o campo de textura candidato faz referência ao recurso de textura criado. Cada um AR 候选图像deve ter um identificador exclusivo que pode ser definido no campo de nome amigável . Caso contrário, AR 会话配置qualquer nome idêntico em candidatos diferentes usados ​​no mesmo causará uma colisão de código hash.

A etapa final é definir as dimensões físicas da imagem em centímetros através dos campos largura/altura . Medições adequadas são críticas para a estimativa correta da pose e posterior colocação do aumento. Estes dados são preenchidos automaticamente levando em consideração a escala da imagem seguindo a orientação definida no campo “Orientação”. Infelizmente, a orientação atual do Unreal Engine está invertida, então os desenvolvedores devem usar paisagem para imagens em retrato e retrato para imagens em paisagem .

O plug-in Snapdragon Spaces pode escolher entre AR 候选图像diferentes modos de rastreamento se o pai do ativo for uma imagem candidata a AR do Spaces.

  • Modo dinâmico : atualiza a posição da imagem rastreada a cada quadro, adequado para alvos móveis e estáticos. Se nenhuma imagem rastreada for encontrada, nenhuma posição ou pose será informada. Usado por padrão.
  • Modo adaptativo : Atualize a posição das imagens estáticas periodicamente (aproximadamente a cada 5 quadros) se elas se moverem ligeiramente. Isso atinge um equilíbrio entre o consumo de energia e a precisão das imagens estáticas.
  • Modo Still : Bom para rastrear imagens que são conhecidas por estarem estáticas. As imagens rastreadas neste modo são fixadas em posição quando detectadas pela primeira vez e nunca são atualizadas. Isto reduz o consumo de energia e melhora o desempenho, mas se houver algum desvio na imagem rastreada, sua posição não será atualizada.

O modo de rastreamento pode ser alterado enquanto o aplicativo está em execução sem parar ou reiniciar a sessão AR usando os seguintes nós:

  • Defina o modo de rastreamento de alvo de imagem por nome amigável.
  • Defina o modo de rastreamento de alvo de imagem por imagem candidata.
  • Defina o modo de rastreamento de alvos de imagem por nome amigável.
  • Defina o modo de rastreamento de alvos de imagem por imagem candidata.

SetImageTrackedModeByIDObsoleto na versão 0.15.0.

insira a descrição da imagem aqui
Este exemplo usa D_SpacesARCandidateImage_SpaceTowno ativo Blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable). Os alvos de imagem são medidos a 26 cm de altura (quando impressos em DIN A4 ou carta US). BP_Gizmo_AugmentedImageO ativo do blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable) está renderizando um gizmo na parte superior do alvo da imagem física que indica sua orientação quando reconhecido e rastreado.

insira a descrição da imagem aqui

6.3.5 Detecção de plano

6.3.5.1 Exemplo de detecção de plano

Este exemplo demonstra como visualizar planos de rastreamento encontrados no mundo real. Para obter informações básicas sobre como personalizar atualizações de objetos rastreáveis ​​e a funcionalidade dos componentes do Unreal Engine AR Trackable Notify, consulte a documentação do Unreal Engine (abre uma nova janela).

6.3.5.1.1 Como funciona o exemplo

Por padrão, quando o exemplo é aberto, ele gera formas simples para os planos detectados. Quando a opção Usar detecção de casco convexo está habilitada, a amostra gera formas complexas usando o casco convexo dos planos detectados.

Wireframes dessas geometrias também podem ser exibidos.

insira a descrição da imagem aqui

6.3.5.1.2 Gerenciador de AR plano

BP_PlaneARManagerO arquivo Blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > PlaneDetection > Placeable) centraliza a criação e destruição de planos como operações de geometria aumentada por meio do sistema de eventos. Este Blueprint vincula eventos do componente AR Trackable Notify (abre uma nova janela) para reagir às alterações no AR Trackable Plane. Os seguintes eventos estão relacionados à detecção de avião:

  • Adicionar/Atualizar/Remover Planos de Rastreamento : Esses eventos são chamados quando o sistema usa geometria plana simples.
  • Adicionar/atualizar/remover geometria rastreada : esses eventos são chamados quando o sistema usa geometria plana complexa.
    • Ao contrário de outros casos, diferentes tipos de objetos podem ser registrados como arquivos UARTrackedGeometry. Para verificar se é convexo, sua classificação de objeto deve ser EARObjectClassification::NotApplicable. Por favor, use GetObjectClassificationa função para confirmar.insira a descrição da imagem aqui

AVISO
Lembre-se de alterar o estado de ToggleARCapture para reiniciar a detecção, selecione ON quando o comportamento do personagem começar, pare a detecção e OFF quando terminar , para destruir toda a geometria AR gerada.

6.3.5.1.3 Configuração complexa de sessão AR

Quando o usuário habilita a opção Convexo, o sistema começa a usar D_ConvexHullSessionConfigo recurso (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > PlaneDetection > Core) para detectar planos complexos.

As opções relacionadas à detecção de avião são:

  • Use detecção de casco convexo
  • detecção de nível
  • Detecção de plano vertical
6.3.5.1.4 Configurações de funções

平面检测As configurações do recurso podem ser encontradas clicando no ícone de engrenagem próximo a um recurso nas configurações do projeto OpenXR .

  • Use a compreensão da cena:
    • Ativar ou desativar esta configuração produzirá resultados diferentes em termos da forma e do número de planos detectados.
    • Ativar esta configuração permitirá 场景理解a detecção de aviões. Isso utiliza 了空间网格划分(实验)a mesma técnica usada pelas funções.

Diferença entre detecção de plano padrão e detecção de plano baseada em compreensão de cena

medir Padrões compreensão da cena
Velocidade de detecção e primeira detecção normal rápido
falso positivo Taxa de falsos positivos muito baixa propenso a falsos positivos
Precisão do plano alto alto
Número de aviões cru um monte de
Atualizações e movimentos do avião Estável, improvável de ser atualizado Configuração de sessão de AR dinâmica com mais atualizações simples
filtro de orientação plana Opções de filtro horizontal e vertical sem opções de filtro
teste de acerto Opera contra aviões conforme esperado Teste de sucesso em grades

6.3.6 Acesso à estrutura da câmera (experimental)

6.3.6.1 Exemplo de acesso ao quadro da câmera

AVISO
O recurso de acesso ao quadro da câmera está marcado como experimental porque as otimizações em plug-ins e serviços do Snapdragon Spaces estão atualmente quebrando a compatibilidade com versões anteriores.

Este exemplo demonstra como acessar informações relevantes da câmera, neste caso a imagem e os intrínsecos da câmera, de um dispositivo compatível. Atualmente esse recurso está limitado a câmeras RGB.

6.3.6.1.1 Como funciona o exemplo

Por padrão, quando o exemplo é executado, a IU exibe a imagem RGB capturada pelo dispositivo e os valores intrínsecos associados a ela. Os usuários podem pausar e retomar a captura de quadros com os botões correspondentes.

insira a descrição da imagem aqui
Caso o dispositivo não seja concedido 相机访问权限, as informações da imagem, do botão e da câmera serão substituídas por uma mensagem de aviso avisando o usuário para ativá-lo.

6.3.6.1.1.1 Gerenciador de AR de acesso à estrutura da câmera

O exemplo usa BP_CameraFrameAccessARManagero ativo Blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > Placeable) para 切换 AR 捕获iniciar e parar a captura da câmera, que deve ser definida como ON se a captura for iniciada e OFF se for interrompê-la. Além disso, Câmera deve ser definida como o tipo de captura para este nó. Este recurso oferece suporte SpacesSessionConfigà configuração de qualquer recurso. Ele também pode ser ativado ou desativado usando o método Toggle Spaces Feature .

6.3.6.1.1.2 Biblioteca de captura de câmera

A interface Unreal AR nos oferece a capacidade de obter informações da câmera.

  • Get AR Texture
    • Retorna o quadro da câmera. O plugin Snapdragon Spaces estende as informações para fornecer quadros RGB como texturas 2D. Transmita para Spaces AR 相机图像纹理a classe para obter a textura RGB do quadro . Além disso, a imagem da câmera deve ser definida como o tipo de textura para este nó. ,
  • Get Camera Intrinsics
    • Retorna a resolução da imagem da câmera , a distância focal e o ponto principal .
      insira a descrição da imagem aqui
      O plugin Snapdragon Spaces fornece funcionalidades adicionais para ajudar a gerenciar a captura de câmera para Blueprints:
  • Set Camera Frame Access State
    • Para pausar a captura da câmera, defina Activecomo FALSE . Para continuar capturando com a câmera, Activedefina como TRUE . Obsoleto na versão 0.15.0, use a funcionalidade Pause AR Session ou Pause Space .
  • O acesso ao quadro da câmera é compatível
    • Retorna TRUE se a captura estiver disponível, FALSE caso contrário . Caso a aplicação utilize captura, é recomendado verificar esse resultado durante o Tick . Obsoleto na versão 0.15.0, use-o se o recurso estiver disponível .insira a descrição da imagem aqui

DICA
O comportamento do exemplo WBP_CameraFrameAccessé implementado no ativo Blueprint (localizado em SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > UI).

6.3.6.2 Avançado

Esta seção descreve como acessar dados brutos do quadro da câmera YUV sem extraí-los da textura gerada. Também explica como obter dados extras que não estão acessíveis nos blueprints. Contém todos os tipos de dados e estruturas envolvidas neste procedimento, incluindo as funções disponíveis como USpacesRuntimeBlueprintLibraryparte e incluídas no SpacesRuntimeBlueprintLibrary.h.

Dica
Esses dados e funções só são acessíveis via C++.

6.3.6.2.1 Tipos de dados

ESpacesPlaneCameraFrameTypeEnumeração que descreve o tipo de plano do quadro.

UENUM()
enum class ESpacesPlaneCameraFrameType : uint8
{
    
    
	Y = 0,
	U = 1,
	V = 2,
	UV = 3
};

ESpacesDistortionCameraFrameModelEnum que descreve diferentes modelos de distorção de lente para calibração de câmera.

UENUM()
enum class ESpacesDistortionCameraFrameModel : uint8
{
    
    
	Linear = 0,
	Radial_2 = 1,
	Radial_3 = 2,
	Radial_6 = 3,
	FishEye_1 = 4,
	FishEye_4 = 5
};

ESpacesCameraFrameFormatEnum que descreve os diferentes formatos de frames de câmera.

UENUM()
enum class ESpacesCameraFrameFormat : uint8
{
    
    
	Unknown = 0,
	Yuv420_NV12 = 1,
	Yuv420_NV21 = 2,
	Mjpeg = 3,
	Size = 4,
};

FFrameDataOffsetEstrutura que descreve o deslocamento dos dados da imagem do sensor nos dados do framebuffer.

USTRUCT()
struct FFrameDataOffset
{
    
    
	GENERATED_BODY()
	int32 X;
	int32 Y;
};

FSpacesPlaneCameraFrameDataUma estrutura que descreve um plano em um framebuffer.

USTRUCT()
struct FSpacesPlaneCameraFrameData
{
    
    
	GENERATED_BODY()
	uint32 PlaneOffset;
	uint32 PlaneStride;
	ESpacesPlaneCameraFrameType PlaneType;
};

  • PlaneOffsetContém o deslocamento do início do buffer até o início dos dados simples.
  • PlaneStrideIndica a distância em bytes de uma linha para a próxima.
  • PlaneTypeDescreve o tipo de dados do quadro.

FSpacesSensorCameraFrameDataEstrutura contendo dados intrínsecos estendidos da câmera.

USTRUCT()
struct FSpacesSensorCameraFrameData
{
    
    
	GENERATED_BODY()
	FARCameraIntrinsics SensorCameraIntrinsics;
	FFrameDataOffset SensorImageOffset;
	TArray<float> SensorRadialDistortion;
	TArray<float> SensorTangentialDistortion;
	ESpacesDistortionCameraFrameModel DistortionCameraFrameModel;
};

  • SensorCameraIntrinsicsContém a resolução da imagem da câmera, o ponto principal e a distância focal.
  • SensorImageOffseté o deslocamento dos dados da imagem do sensor nos dados do framebuffer.
  • SensorRadialDistortionUma série de flutuadores que descrevem os coeficientes de distorção radial.
  • SensorTangentialDistortionUma matriz de números de ponto flutuante que descreve os coeficientes de distorção tangencial.
  • DistortionCameraFrameModelDescreve um modelo de distorção de lente para calibração de câmera.

FSpacesCameraFrameDataA estrutura contém dados de quadro e dados de câmera.

USTRUCT()
struct FSpacesCameraFrameData
{
    
    
	GENERATED_BODY()
	uint32 BufferSize;
	uint8* Buffer;
	ESpacesCameraFrameFormat FrameFormat;
	TArray<FSpacesPlaneCameraFrameData> Planes;
	FSpacesSensorCameraFrameData SensorData;
};

  • BufferSizeé o tamanho do buffer que contém os dados.
  • Bufferé um ponteiro para os dados do quadro.
  • FrameFormaté o formato do quadro da câmera.
  • Planesé uma matriz contendo os planos do quadro.
  • SensorDataDados intrínsecos estendidos contendo a câmera que capturou o quadro.
6.3.6.2.2 Funções
  • static FSpacesCameraFrameData GetCameraYUVFrameData(): acesse e retorne os dados mais recentes do quadro da câmera no formato FSpacesCameraFrameData.
  • static bool ReleaseCameraFrameData(): libera um quadro acessado anteriormente. Deve ser utilizado após os dados do quadro anterior para acessar outro quadro.

Acho que você gosta

Origin blog.csdn.net/weixin_38498942/article/details/132585525
Recomendado
Clasificación