Returns vertex index from triangle corner (0, 1, or 2).
Takes mesh (surface-based mesh entity), surface (surface handle, 0-based), triangleIndex (triangle number, 0-based), corner (corner index: 0=first vertex, 1=second vertex, 2=third vertex).
Returns vertex index (0-based) or -1 on error.
3D Graphics
Parameters & Returns
Parameters
meshInt
surfaceInt
triangleIndexInt
cornerInt
Returns
Int
Quick Summary
Returns vertex index from triangle corner (0, 1, or 2).
Takes mesh (surface-based mesh entity), surface (surface handle, 0-based), triangleIndex (triangle number, 0-based), corner (corner index: 0=first vertex, 1=second vertex, 2=third vertex).
Returns vertex index (0-based) or -1 on error.
Technical Exegesis...
Returns vertex index from triangle corner (0, 1, or 2). Takes mesh (surface-based mesh entity), surface (surface handle, 0-based), triangleIndex (triangle number, 0-based), corner (corner index: 0=first vertex, 1=second vertex, 2=third vertex). Returns vertex index (0-based) or -1 on error. Validates mesh exists, type is ENTITY_MESH, is surface-based, surface index valid, triangle index valid, and corner in range [0,2]. Calculates index offset: triangleIndex * 3 + corner. Returns surface->indices[offset].
Returns vertex index from triangle corner (0, 1, or 2). Takes mesh (surface-based mesh entity), surface (surface handle, 0-based), triangleIndex (triangle number, 0-based), corner (corner index: 0=first vertex, 1=second vertex, 2=third vertex). Returns vertex index (0-based) or -1 on error. Validates mesh exists, type is ENTITY_MESH, is surface-based, surface index valid, triangle index valid, and corner in range [0,2]. Calculates index offset: triangleIndex * 3 + corner. Returns surface->indices[offset]. Returns -1 if: invalid mesh, not surface-based, invalid surface, triangle index out of range, corner not 0/1/2.
This function retrieves vertex indices from triangle topology for mesh analysis. Triangles stored as index array: [tri0_v0, tri0_v1, tri0_v2, tri1_v0, tri1_v1, tri1_v2, ...]. Each triangle uses 3 consecutive indices. Corner parameter selects which vertex: corner=0 returns first vertex (v0), corner=1 returns second (v1), corner=2 returns third (v2). Winding order encoded: corner sequence (0->1->2) defines triangle orientation (counter-clockwise = front-facing). Use cases: (1) Triangle walking (get adjacent vertices for traversal), (2) Topology analysis (find edge connections, neighbor triangles), (3) Mesh validation (check vertex references are valid), (4) Normal calculation (get triangle vertices for cross product), (5) Triangle extraction (copy triangle to new mesh). Common pattern: For i=0 To b3dCountTriangles(mesh, surf)-1, v0=b3dTriangleVertex(mesh, surf, i, 0), v1=b3dTriangleVertex(mesh, surf, i, 1), v2=b3dTriangleVertex(mesh, surf, i, 2), x0=b3dVertexX(mesh, surf, v0), y0=b3dVertexY(mesh, surf, v0), z0=b3dVertexZ(mesh, surf, v0), similar for v1/v2, process triangle vertices. Corner validation: only 0, 1, 2 valid - other values return -1. Triangle index validation: must be in range [0, triangleCount-1]. Returned vertex index used with b3dVertexX/Y/Z/NX/NY/NZ to get vertex data. Vertex sharing: multiple triangles may reference same vertex - shared vertices enable smooth shading. Degenerate triangles possible: triangle may have duplicate vertices (v0=v1 or v1=v2 or v2=v0) causing zero area - detect by checking returned indices. Alternative: direct index array access if structure known, triangle mesh libraries for complex topology queries. Edge detection: edges shared by two triangles have matching vertex pairs (tri0 edge v0->v1 matches tri1 edge v1->v0).