2010-05-23 3 views

ответ

1

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

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

НТН

EDIT: К сожалению, сейчас я понимаю вопрос.

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

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

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

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

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; 
} 

Это должно быть достаточно, чтобы связать текстуру, как правило - делать это перед нанесением с tesselators.

НТН

+0

Но когда вы используете GLUTess, вы не можете делать вызовы перед каждой вершиной, следовательно, моя проблема – jmasterx

0

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

Смежные вопросы