# Determine Mesh Vertex Index Given Another Mesh Index

Please bare with me as I explain what I am trying to accomplish :P

Each 'X' below represents a mesh vertex:

For my Unity3d GameObject (G1); the mesh vertices are stored in a C# List object in the following order. *Note the mesh index 'A'. This is a value I know - in this case A=16 (mesh index 16).

I have another GameObject (G2) whose shape is the same (a simple rectangle) but the mesh vertices are ordered differently.*Note the mesh index 'B'. This is a value I dont know and I want to find this value (mesh index) - in this case B=17 (mesh index 17).

As you can see the mesh arrangement is pretty much the same except rotated 90 degrees. If I know the 'mesh vertex index' of A how can I find the 'mesh vertex index' of B?

Whats an algorithm that can calculate the mesh index of B? My attempt is not working at all:

uint A     = 16;
uint nCols = 6;
uint nRows = 4;

// Technically both B and A sit on Row 3, Column 5 so if I can find A's row and column maybe I am there?
uint aCol = 16 / nCols;        // nup not right
uint aRow = (16 % nCols) - 1;  // gives 3

// Once I've calculated aCol and aRow its easy
uint B    = (aRow * nRows) + aCol;  // ie, (3 * 4) + 5 = 17

• I think I have the general idea, but it might be better if it was rephrased in terms of inputs and outputs. Would it be something like this? int GetVertexIndex(int row, int column) { /* ... */ } If so, part of the answer is going to include figuring out which is a row and which is a column, since meshes are row/column agnostic. – jzx Jun 20 '14 at 17:04

## 1 Answer

I think that you got the most part right except by the fact of aCol and aRow is swapped.

// the mod operation will give a number ranging from 0 to nCols-1 so there's no need to
// subtract 1.
uint aCol = 16 % nCols;
uint aRow = 16 / nCols; // this value must be less than nRows

// The B get swapped as well because of the rotation of the matrix
// uint B    = (aCol * nRows) + aRow;
// but is not quite right yet, since the aRow counts ftom top to bottom therefore
uint B    = (aCol * nRows) + (nRows - aRow - 1);


Hope it helps. If the mesh arrangement is arbitrary you will need a more complex code than this one.