Попробуйте думать о своем икосаэдре как о низкополигональной сфере. Я полагаю, что икосаэдр Ламарша имеет центр в 0,0,0. Посмотрите на этот урок, он написан для DirectX, но он объясняет общий принцип отображения текстур сфер http://www.mvps.org/directx/articles/spheremap.htm. Я использовал его в своем проекте, и он отлично работает. Вы перемещаете 3D-объект, применяя различные матрицы преобразования. Вы должны иметь что-то вроде этого
glPushMatrix();
glTranslatef();
draw icosahedron;
glPopMatrix();
Вот мой фрагмент кода того, как я сделал texCoords для формы полусферы, на основе учебника, упомянутого выше
GLfloat *ellipsoidTexCrds;
Vector3D *ellipsoidNorms;
int numVerts = *numEllipsoidVerticesHandle;
ellipsoidTexCrds = calloc(numVerts * 2, sizeof(GLfloat));
ellipsoidNorms = *ellipsoidNormalsHandle;
for(int i = 0, j = 0; i < numVerts * 2; i+=2, j++)
{
ellipsoidTexCrds[i] = asin(ellipsoidNorms[j].x)/M_PI + 0.5;
ellipsoidTexCrds[i+1] = asin(ellipsoidNorms[j].y)/M_PI + 0.5;
}
Я написал это около полутора лет назад, но я помню, что я вычислил мои нормали вершин как равные нормализованным вершинам. Это возможно, потому что когда у вас сферическая форма с центром в (0,0,0), то вершины в основном описывают лучи из центра сферы. Нормализуйте их, и вы получите вершинные нормали.
И, кстати, если вы планируете использовать 3D-движок на iPhone, используйте Ogre3D, это действительно быстро.
надеюсь, это поможет:)