我想用openGL创建一个3d立方体。另外,我想用我在纹理中转换的图像来覆盖每一面。3d cube opengl - 重叠的边
我在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);
变换的thexture图像:
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();
我为立方体的另一侧相同。 的顺序,其中我渲染纹理是:
底部(地面)侧
向上侧
背后侧前侧
左侧
右侧
什么是错的或我错过了什么?或者,也许不能用2d坐标创建一个3d立方体(glVertex2f (...)
)?
感谢您的帮助!
看起来像Z缓冲问题。 – 2013-02-18 23:31:35
你能告诉我更多吗? OpenGL对我来说是新的... – Cristina1986 2013-02-18 23:34:31
为什么不使用普通的3D对象而不是用2D来伪造它?它会扰乱你的深度缓冲区并扭曲你的纹理。 – Matzi 2013-02-18 23:36:28