纹理渲染不能用作顶点,但可以用作经典的旧OpenGL代码

时间:2018-12-30 10:00:44

标签: opengl

经典的旧代码有效。类似于glBegin()glEnd()。但是我想使其更新颖,但不如3.3版本那么多。但是作为顶点它是行不通的。我正在使用MacBook Pro XCode。

c ++ opengl glfw会导致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 :(得分:4)

  

glEnableClientState(GL_TEXTURE_2D_ARRAY);

不是您所需要的。您要在那里GL_TEXTURE_COORD_ARRAY

GL_TEXTURE_2D_ARRAY是纹理目标,例如GL_TEXTURE_2DGL_TEXTURE_CUBE_MAP

GL_TEXTURE_2D_ARRAY是2D图像的堆栈,其中2D图层中的纹理像素之间发生过滤,但图层之间不发生过滤,并且该图层由基于0的整数索引进行索引。 2D数组的典型用法是翻页动画。