C++ 三维立方体opengl-重叠边

C++ 三维立方体opengl-重叠边,c++,opengl,3d,textures,C++,Opengl,3d,Textures,我想用openGL创建一个3d立方体。另外,我想用我在纹理中变换的图像覆盖每一面 我在2D中找到立方体坐标,然后为每一侧创建一个QUADS 我的问题是,当我渲染对应立方体边的纹理时,我看到这些纹理彼此重叠,如下图所示: 我的代码是: 初始化: glGenTextures(2, textures); glClearColor (0.0, 0.0, 0.0, 0.0); glClearDepth(1.0f); // Depth Buffer Setu

我想用openGL创建一个3d立方体。另外,我想用我在纹理中变换的图像覆盖每一面

我在2D中找到立方体坐标,然后为每一侧创建一个
QUADS

我的问题是,当我渲染对应立方体边的纹理时,我看到这些纹理彼此重叠,如下图所示:

我的代码是:

初始化:

glGenTextures(2, textures);
glClearColor (0.0, 0.0, 0.0, 0.0);
glClearDepth(1.0f);                         // Depth Buffer Setup
glEnable(GL_DEPTH_TEST);                        // Enables Depth Testing
glDepthFunc(GL_ALWAYS);
在纹理中变换图像:

up = imread("up.png");

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glBindTexture(GL_TEXTURE_2D, textures[1]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, up.cols, up.rows, GL_RGB, GL_UNSIGNED_BYTE, up.data);
显示多维数据集:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);

    // Set Projection Matrix
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, WIDTH, HEIGHT, 0); 

    // Switch to Model View Matrix
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity(); 

glBindTexture(GL_TEXTURE_2D, textures[1]);
        glBegin(GL_QUADS);
        //sopra
        glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)((coord[6].x)),(GLfloat)(coord[6].y));
        glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)((coord[5].x)),(GLfloat)(coord[5].y));
        glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)((coord[4].x)),(GLfloat)(coord[4].y));
        glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)((coord[7].x)),(GLfloat)(coord[7].y)); 
        glEnd();
我对立方体的其他面也这样做。 渲染纹理的顺序是:

底部(地面)侧

正面

背后

正面

左侧

右侧

什么是错的,或者我错过了什么?或者,可能无法创建具有二维坐标(
glVertex2f(…)
)的三维立方体


谢谢你的帮助

无法创建具有二维坐标的立方体。这些边重叠是因为它们都在空间的同一平面上。立方体位于三维空间中,因此需要3个坐标,x、y和z

因此,请尝试使用:

glVertex3f(x, y, z);
并根据每个面的位置使用一些适当的z值

对于仍然可以使用的纹理:

glTexCoord2f(x, y);
因为纹理是在二维空间中

如果您仍然对坐标的使用感到困惑,我建议您阅读以下内容,以帮助您理解openGL中的3d空间:


看起来z缓冲有问题。您能告诉我更多吗?OpenGL对我来说是新的…为什么不使用常规的3D对象而不是在2D中伪造它呢?它弄乱了你的深度缓冲区,扭曲了你的纹理。@Matzi因为我能找到二维坐标。。。我不知道如何找到三维坐标。。