Текстурирование и наложение текстур Полигоны GLUTess? - PullRequest
0 голосов
/ 23 мая 2010

Как точно предоставить координаты текстуры и связать текстуру для многоугольника GLUTess?Спасибо

Ответы [ 2 ]

1 голос
/ 24 мая 2010

Не знаю, правильно ли я вас поняла. Текстурирование хорошо описано в redbook . Они используют GLUT в книге, поэтому вы должны найти ответ в примерах.

Вкратце: вызовите glTexCoord2f (u, v) до вызова glVertex (если вы не используете VBO), где u, v - координаты текстуры.

НТН

EDIT: Извините, теперь я понимаю вопрос.

Я никогда не использовал тесселяторы, но, возможно, я могу помочь: -)

Тесселаторы только находят точки, где должны быть созданы новые вершины. Стандартный glVertex используется для отправки их в графический процессор.

Вы можете использовать свою собственную функцию для рисования вершины. Если вы зарегистрируете обратный вызов с

gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid (*) ()) &vertexCallback); 

тогда ваша функция вызывается каждый раз, когда создается новая вершина. Вы также можете использовать

gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid (*) ()) &combineCallback);

для добавления некоторой информации в вершину - например, нормали, цвета, текс-координаты.

См. redbook - chapter11 пример 11-2

/*  a different portion of init() */
   gluTessCallback(tobj, GLU_TESS_VERTEX,
                   (GLvoid (*) ()) &vertexCallback);
   gluTessCallback(tobj, GLU_TESS_BEGIN,
                   (GLvoid (*) ()) &beginCallback);
   gluTessCallback(tobj, GLU_TESS_END,
                   (GLvoid (*) ()) &endCallback);
   gluTessCallback(tobj, GLU_TESS_ERROR,
                   (GLvoid (*) ()) &errorCallback);
   gluTessCallback(tobj, GLU_TESS_COMBINE,
                   (GLvoid (*) ()) &combineCallback);

/*  new callback routines registered by these calls */
void vertexCallback(GLvoid *vertex)
{
   const GLdouble *pointer;

   pointer = (GLdouble *) vertex;
   glColor3dv(pointer+3);
   glVertex3dv(vertex);
}

void combineCallback(GLdouble coords[3], 
                     GLdouble *vertex_data[4],
                     GLfloat weight[4], GLdouble **dataOut )
{
   GLdouble *vertex;
   int i;

   vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
   vertex[0] = coords[0];
   vertex[1] = coords[1];
   vertex[2] = coords[2];
   for (i = 3; i < 7; i++)
      vertex[i] = weight[0] * vertex_data[0][i] 
                  + weight[1] * vertex_data[1][i]
                  + weight[2] * vertex_data[2][i] 
                  + weight[3] * vertex_data[3][i];
   *dataOut = vertex;
}

Достаточно, как обычно, связать текстуру - сделайте это перед рисованием с помощью тесселяторов.

НТН

0 голосов
/ 24 мая 2010

Тесселлятор должен интерполировать координаты текстуры на основе вершин, из которых он был получен. Другим методом будет использование автоматической генерации текстурных координат, если это работает для ситуации.

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