Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)

Enlighten API 3.10 Documentation
Results will update as you type.
  • class Geo IdentDataCompare
  • class Geo IdentVertLinkBuilder
  • class Geo IdxLink
  • class Geo IffReader
  • class Geo IffTextWriter
  • class Geo IffWriter
  • class Geo IGeoEvent
  • class Geo IGeoInputStream
  • class Geo IGeoProgressProxy
  • class Geo IGeoRayTracingContext
  • class Geo IGeoReleasable
  • class Geo IGeoSerialisable
  • class Geo IGeoStream
  • class Geo IRtMesh
  • class Geo ITerminalCmdHandler
  • class Geo ITerminalDelegate
  • class Geo ITerminalInputHandler
  • class Geo ITerminalOutputHandler
  • class Geo Matrix
  • class Geo MemoryAllocator
  • class Geo NonCopyable
  • class Geo Optional
  • class Geo PackedInteger4
  • class Geo PointLeaf
  • class Geo PointSplit
  • class Geo PointSplitBounds
  • class Geo PointSplitState
  • class Geo QuickTaskTimer
  • class Geo RayResult
  • class Geo Releasable
  • class Geo RingBuffer
  • class Geo RtMesh
  • class Geo RtMeshGroup
  • class Geo ScopedTickCounter
  • class Geo ScopedTimer
  • class Geo SHCoeff
  • class Geo SimpleRNG
  • class Geo TerminalProvider
  • class Geo TextureWriter
  • class Geo TreeNode
  • class Geo TriGroupSelection
  • class Geo TxtProgressBar
  • namespace Geo Iff
  • namespace Geo PathUtils
  • namespace Geo Version
  • struct Geo ArrayRange
  • struct Geo AtlasMeshChartingFlags
  • struct Geo AtlasMeshTriangle
  • struct Geo AtlasMeshTriangleCorner
  • struct Geo AtlasMeshVertex
  • struct Geo AtlasMeshVertexSplitResult
  • struct Geo BboxEdge
  • struct Geo BboxFace
  • struct Geo ClippedRay
  • struct Geo DebugLine
  • struct Geo eWindingOrder
  • struct Geo FixedSizeArray
  • struct Geo GeoAtomic
  • struct Geo GeoError
  • struct Geo GeoFixedPoolList
  • struct Geo GeoFixedPoolMap
  • struct Geo GeoPoint2
  • struct Geo GeoPoint2D
  • struct Geo GeoPoint3
  • struct Geo GeoPoint3D
  • struct Geo GeoRGBXTextureElement
  • struct Geo GeoVector3
  • struct Geo GeoVector4
  • struct Geo InitRayTracing
  • struct Geo Matrix4x4
  • struct Geo PerformanceBlock
  • struct Geo RastFragment
  • struct Geo RastTri
  • struct Geo RastVert
  • struct Geo Rayf
  • struct Geo ScopeStartStop
  • struct Geo Statistics
  • struct Geo TypeInfo
  • struct Geo VectorD
  • struct Geo WriteRangePolicy
  • struct Geo ZeroedPadding
    Calendars

You‘re viewing this with anonymous access, so some content might be blocked.
/
class Geo TriGroupSelection

    This is the documentation for Enlighten.

    class Geo TriGroupSelection

    Nov 21, 2019

    class Geo::TriGroupSelection

    Utility for doing vertex-based chart identification.

    This is the code used as part of the precompute for identifying the tri groups (aka charts) in an Enlighten::IPrecompInputMesh mesh for mesh projection and packing into lightmaps. It identifies tri groups based on the index buffer and a set of explicit links. It holds the chart information in two forms for convenience:

    1. A set of identified charts, with a list of triangle indices for each.

    2. An array of chart indices to match the vertex array.

    A triangle group is any group of triangles that do not share vertices with any other group. This definition allows us to operate on groups independently without having to worry about the changes to one group affecting another.

    There are two reasons triangles may be joined together into the same group:

    1. They share vertices and therefore cannot be separated

    2. They reference vertices that are explicitly linked together

    The index buffer specifies all the information we need to determine which vertices are between triangles. Additional explicit links can also be added as an array of index pairs. The explicit links allow an opportunity to remove any unnecessary vertex duplication that may exist, such as vertices being duplicated to incorporate additional irrelevant data. Note that the actual vertex data is not required.

    Variables

    Name Description
    const Geo::u8 groupTypeNormal = 0

    Group type constants.

    const Geo::u8 groupTypeSmoothBevel = 1

    Group type constants.

    Functions

    Name Description
    Create(const Geo::s32, const Geo::s32 *, Geo::s32, const IdxLink *, Geo::s32, const Geo::s16 *, const Geo::u8 *)

    Create a tri group selection.

    CreateExplicit(const Geo::s32, const Geo::s32, Geo::s32 *, Geo::s32 *, Geo::s32 *, Geo::s32 *, Geo::s16 *, Geo::u8 *)

    Explicitly construct a TriGroupSelection from ready-made arrays.

    GetChartTagForGroupIdx(Geo::s32)

    Gets the chart tag for the given TriGroup index.

    GetGroupTypeForGroupIdx(Geo::s32)

    Gets the group type for the given TriGroup index.

    GetNumTriGroups()

    Get the number of tri groups.

    GetNumTrisInGroupIdx(Geo::s32)

    Returns the number of tris in the tri group specified by groupIdx.

    GetPerVertexGroupIdxArray()

    Access the array of group indices with the same length and format as the vertex buffer Will be null if numVertices was 0.

    GetPerVertexGroupIdxArrayLength()

    The length of the per vertex group idx array.

    GetTriIdxArrayForGroupIdx(Geo::s32)

    Get an array of triangle indices that comprise the group.

    Release()

    Release the object.

    SetGroupTypeForGroupIdx(Geo::s32, Geo::u8)

    Sets the group type for the given TriGroup index.


    static TriGroupSelection* Geo::TriGroupSelection::Create


    public: TriGroupSelection * Create
    (
        const Geo::s32 numVertices,
        const Geo::s32 * indexBuffer,
        Geo::s32 numIndices,
        const IdxLink * linkBuffer,
        Geo::s32 numLinks,
        const Geo::s16 * chartTags,
        const Geo::u8 * faceTypes
    )


    Create a tri group selection.

    Parameters
    [in] numVertices

    Must be zero or positive and larger than any index referenced by indexBuffer. Zero will succeed but contain no groups.

    [in] indexBuffer

    Array of indices to the vertex buffer. Can be null only if numVertices == numIndices == 0. Length should match numIndices.

    [in] numIndices

    Length of indexBuffer. Zero will succeed contain no groups.

    [in] linkBuffer

    Optional if numLinks == 0. An array of vertex index pairs to explicitly link.

    [in] numLinks

    The length of linkBuffer, or 0 for no links.

    [in] chartTags

    Array of user tags specified per face, can be NULL. Used to identify charts and to control auto UV generation and mesh projection.

    [in] faceTypes

    Array of face types, can be NULL. Used to identify different types of faces (i.e. bevel faces).


    static TriGroupSelection* Geo::TriGroupSelection::CreateExplicit


    public: TriGroupSelection * CreateExplicit
    (
        const Geo::s32 numVertices,
        const Geo::s32 numGroups,
        Geo::s32 * numTrisInTriGroup,
        Geo::s32 * triGroupBufferOffset,
        Geo::s32 * sharedTriIdxBuffer,
        Geo::s32 * vertexGroupIdxArray,
        Geo::s16 * chartTags,
        Geo::u8 * chartTypes
    )


    Explicitly construct a TriGroupSelection from ready-made arrays.

    This provides a means to wrap a TriGroupSelection object around a set of arrays that match the internal structure of this class. This function takes ownership of the arrays and will delete them on exit. The parameters correspond to the m_ member variable namesakes. Note that this function does no error checking so the caller must ensure the data is correctly structured.


    Geo::s16 Geo::TriGroupSelection::GetChartTagForGroupIdx


    public: Geo::s16 GetChartTagForGroupIdx
    (
        Geo::s32 groupIdx
    ) const


    Gets the chart tag for the given TriGroup index.

    Parameters
    [in] groupIdx

    An index in the range 0 <= groupIdx < GetNumTriGroups()


    Geo::u8 Geo::TriGroupSelection::GetGroupTypeForGroupIdx


    public: Geo::u8 GetGroupTypeForGroupIdx
    (
        Geo::s32 groupIdx
    ) const


    Gets the group type for the given TriGroup index.

    Parameters
    [in] groupIdx

    An index in the range 0 <= groupIdx < GetNumTriGroups()


    Geo::s32 Geo::TriGroupSelection::GetNumTriGroups


    public: Geo::s32 GetNumTriGroups() const


    Get the number of tri groups.


    Geo::s32 Geo::TriGroupSelection::GetNumTrisInGroupIdx


    public: Geo::s32 GetNumTrisInGroupIdx
    (
        Geo::s32 groupIdx
    ) const


    Returns the number of tris in the tri group specified by groupIdx.

    Parameters
    [in] groupIdx

    An index in the range 0 <= groupIdx < GetNumTriGroups()

    Returns

    The number of tris or -1 if groupIdx is out of range.


    const Geo::s32* Geo::TriGroupSelection::GetPerVertexGroupIdxArray


    public: const Geo::s32 * GetPerVertexGroupIdxArray() const


    Access the array of group indices with the same length and format as the vertex buffer Will be null if numVertices was 0.


    Geo::s32 Geo::TriGroupSelection::GetPerVertexGroupIdxArrayLength


    public: Geo::s32 GetPerVertexGroupIdxArrayLength() const


    The length of the per vertex group idx array.

    This is the same as numVertices passed in during Create()


    const Geo::s32* Geo::TriGroupSelection::GetTriIdxArrayForGroupIdx


    public: const Geo::s32 * GetTriIdxArrayForGroupIdx
    (
        Geo::s32 groupIdx
    ) const


    Get an array of triangle indices that comprise the group.

    Because all the vertices in a triangle are linked into the same group by definition we only need to store the indices of the triangles in a group. So all elements of the set {indexBuffer[i * 3 + 0..2]}, where i is a triangle index, will be in the same group. This class doesn't currently provide group indices in an index buffer format, but this can be easily and efficiently reconstructed from this data.

    Parameters
    [in] groupIdx

    An index in the range 0 <= groupIdx < GetNumTriGroups()

    Returns

    The array of triangle indices.


    void Geo::TriGroupSelection::Release


    public: void Release()


    Release the object.


    void Geo::TriGroupSelection::SetGroupTypeForGroupIdx


    public: void SetGroupTypeForGroupIdx
    (
        Geo::s32 groupIdx,
        Geo::u8 groupType
    )


    Sets the group type for the given TriGroup index.

    , multiple selections available,
    {"serverDuration": 11, "requestCorrelationId": "9661a27f0fff4b2c9255adaa8c394b7b"}