Как мне наложить текстуру по сторонам икосаэдра? - PullRequest
3 голосов
/ 16 марта 2011

Я давно пытаюсь разработать 3D-игру. я прошел сквозь это учебник и обнаружил, что я не знал достаточно, чтобы на самом деле сделать игру.

В настоящее время я пытаюсь добавить текстуру к икосаэдру (в разделе «Взгляд на базовый рисунок»), который он использовал в этом уроке, но я не могу получить текстуру более чем на одной стороне. Остальные стороны совершенно невидимы без логической причины (они прекрасно отображались, пока я не добавил текстуру).

Вот мои основные вопросы:

  • Как сделать так, чтобы текстура правильно отображалась без использования миллиона вершин и цветов для имитации результатов?

  • Как я могу переместить объект на основе переменной, которую я могу установить в других функциях?

1 Ответ

3 голосов
/ 18 марта 2011

Попробуйте думать о своем икосаэдре как о низкополигональной сфере. Я полагаю, что икосаэдр Ламарша имеет центр в 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, это действительно быстро.

надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...