纹理渲染不作为垂直,但作为经典的老opengl代码工作

纹理渲染不作为垂直,但作为经典的老opengl代码工作,opengl,Opengl,经典的旧代码有效。比如glBegin()和glEnd()。但我想让它更新的风格,但没有版本3.3那么多。但作为顶点,它不起作用。我正在开发MacBookPro XCode c++opengl glfw glew mac osx 它只显示彩色表面。不是照片 void DrawQuad( GLfloat PosX, GLfloat PosY, GLfloat PosZ, GLfloat edgeLength ) { GLfloat halfSideLength = edgeLength

经典的旧代码有效。比如
glBegin()
glEnd()
。但我想让它更新的风格,但没有版本3.3那么多。但作为顶点,它不起作用。我正在开发MacBookPro 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); 
glEnableClientState(GL_纹理_2D_阵列)

不是你认为你需要的。您需要
GL\u纹理\u坐标\u数组

GL\u TEXTURE\u 2D\u ARRAY
是纹理目标,如
GL\u TEXTURE\u 2D
GL\u TEXTURE\u CUBE\u MAP


GL_TEXTURE_2D_ARRAY
是一组二维图像,其中过滤发生在二维层中的纹理之间,但不发生在层之间,层由基于0的整数索引索引。二维阵列的典型用途是动画书动画。

感谢您的帮助。