Contenedores de vértice - Guía del usuario de Lumberyard

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Contenedores de vértice

VertexContainer es un tipo de hormigón y una interfaz que utilizan varios Lumberyard de los buses de componentes. Lo implementa directamente el Forma de prisma poligonal y el componente Spline y se utiliza indirectamente por el Área de navegación componente.

Contenedor de vértice Interfaz

Un contenedor de vértices proporciona la capacidad de acceder, modificar, añadir y eliminar vértices. A El contenedor de vértice de tiene varias interfaces que se basan entre sí.

Estas incluyen las siguientes interfaces:

Vértices fijos Interfaz

La interfaz más sencilla es FixedVertices. FixedVertices es compatible GetVertex y UpdateVertex Funciones de para vértices en un contenedor y un Size función que devuelve el número de vértices en el contenedor.

Dado que el número de vértices es fijo, los vértices no se pueden añadir ni eliminar. Puedes implemente esta interfaz con una matriz o AZStd::fixed_vector.

VérticesVariables Interfaz

El VariableVertices es compatible con todas las funciones de FixedVertices, pero también proporciona AddVertex, InsertVertex, y RemoveVertex funciones. VariableVertices también proporciona una función de utilidad denominada Empty que comprueba si un contenedor tiene algún elemento o está vacío.

Para implementar la VariableVertices , puede utilizar una AZStd::vector o un VertexContainer.

VertexContainerInterface

El VertexContainerInterface proporciona una interfaz para todas las funciones proporcionadas por las dos interfaces anteriores y el VertexContainer escriba. Para comodidad, la VertexContainerInterface también proporciona SetVertices y ClearVertices funciones que pueden actualizar todas o eliminar todos los vértices en una operación. El SetVertices función toma un vertices El parámetro que contiene una lista de todos los vértices que se van a almacenar.

nota

La VertexContainer es propietario de los vértices a los que tiene acceso; no son almacenado en otro lugar (un VertexContainer no es una vista).

Como se mencionó, el VertexContainerInterface es implementado por el [EMPTY] de componentes y Prisma poligonal componente Los EBuses. El Área de navegación El componente también utiliza la interfaz a través de su dependencia del Forma de prisma poligonal componente. Cada uno de estos Los componentes de utilizan el VertexContainer internamente para gestionar su los vértices.

Para obtener más información acerca de las interfaces en la VertexContainerInterface, consulta el código y los comentarios del código en la sección lumberyard_version\dev\Code\Framework\AzCore\AzCore\Math\VertexContainerInterface.h del archivo.

Para obtener más información acerca de la VertexContainer escriba, consulte el código y el código comentarios en el lumberyard_version\dev\Code\Framework\AzCore\AzCore\Math\VertexContainer.h del archivo.

nota

El VertexContainer puede almacenar Vector2 o bien Vector3 tipos de. El tipo de vector se determina en el momento de compilación cuando el tipo se ha creado. Resulta útil para determinados componentes que no permiten modificar puntos en Z (vertical) y tratar puntos solo en dos dimensiones. El Prisma poligonal El componente utiliza el Vector2 escriba.

Solicitud de EBus Ejemplo de interfaz de bus

A continuación se muestra un ejemplo de un script de Lua que utiliza el RequestBus de la interfaz de.

local firstVertex = <type_with_vertex_container>.vertexContainer[1]; local lastVertex = <type_with_vertex_container>.vertexContainer[spline.vertexContainer:size()]; ...RequestBus.Event.AddVertex(self.entityId, lastVertex + Vector3(1, 2, 3)); ...RequestBus.Event.UpdateVertex(self.entityId, 0, firstVertex + Vector3(1, 2, 3)); ...RequestBus.Event.InsertVertex(self.entityId, spline.vertexContainer:size() - 1, lastVertex + Vector3(1, 2, 3)); ...RequestBus.Event.ClearVertices(self.entityId); ...RequestBus.Event.RemoveVertex(self.entityId, spline.vertexContainer:size() - 1); -- Note: In Lua, use the member functions of VertexContainer, which start indexing from 1 .vertexContainer:AddVertex(lastVertex + Vector3(1, 2, 3)); .vertexContainer:UpdateVertex(1, firstVertex + Vector3(1, 2, 3)); .vertexContainer:InsertVertex(spline.vertexContainer:size(), lastVertex + Vector3(1, 2, 3)); .vertexContainer:ClearVertices(); .vertexContainer:RemoveVertex(spline.vertexContainer:size());