Визуализация текстуры не работает как вершины, но работает как классический старый код opengl - PullRequest
0 голосов
/ 30 декабря 2018

Классические старые коды работают.Как glBegin() и glEnd().Но я хочу сделать его более новым стилем, но не настолько, как версия 3.3.Но как вершины это не работает.Я работаю над MacBook Pro XCode.

c ++ opengl glfw glew mac osx

Показывает только цветную поверхность.Не картинка.

 void DrawQuad( GLfloat PosX, GLfloat PosY, GLfloat PosZ, GLfloat edgeLength )
{

    GLfloat halfSideLength = edgeLength * 0.5f;
    GLfloat vertices[] =
    {
        PosX - halfSideLength, PosY - halfSideLength, PosZ, // bottom left
        PosX + halfSideLength, PosY - halfSideLength, PosZ, // bottom right
        PosX + halfSideLength, PosY + halfSideLength, PosZ, // top right
        PosX - halfSideLength, PosY + halfSideLength, PosZ // top left
    };
    GLfloat colour[] =
    {
        1.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f,
        0.0f, 0.0f, 1.0f,
        1.0f, 1.0f, 0.0f
    };
    GLfloat map2D[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        1.0f, 1.0f,
        0.0f, 1.0f
    };
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, textures[1]);
    glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
    glEnableClientState( GL_VERTEX_ARRAY );
    glEnableClientState( GL_COLOR_ARRAY );
    glEnableClientState(GL_TEXTURE_2D_ARRAY);
    glVertexPointer( 3, GL_FLOAT, 0, vertices );
    glTexCoordPointer( 2, GL_FLOAT, 0, map2D );
    glColorPointer( 3, GL_FLOAT, 0, colour );
    glDrawArrays( GL_QUADS, 0, 4 );
    glDisableClientState( GL_COLOR_ARRAY );
    glDisableClientState(GL_TEXTURE_2D_ARRAY);
    glDisableClientState( GL_VERTEX_ARRAY );
    glDisable(GL_TEXTURE_2D);
}

Но она работает по нижеуказанному:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textures[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(200.0f, 200.0f, -400.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(450.0f, 200.0f, -400.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(450.0f, 450.0f, -400.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(200.0f, 450.0f, -400.0f);
glEnd();
glDisable(GL_TEXTURE_2D); 

1 Ответ

0 голосов
/ 30 декабря 2018

glEnableClientState (GL_TEXTURE_2D_ARRAY);

Это не то, что вам нужно.Вы хотите GL_TEXTURE_COORD_ARRAY там.

GL_TEXTURE_2D_ARRAY - это текстурная цель, например GL_TEXTURE_2D или GL_TEXTURE_CUBE_MAP.

A GL_TEXTURE_2D_ARRAY - это стопка 2D-изображений, где происходит фильтрациямежду текселями в 2D-слое, но не между слоями, и этот уровень индексируется целочисленным индексом на основе 0.Типичное использование для двумерного массива - анимация флипбука.

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