gpt4 book ai didi

c++ - OpenGL Skybox 无法正确渲染边

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:14 26 4
gpt4 key购买 nike

我是 OpenGL 的新手,在尝试渲染天空盒时遇到了问题。这张图很好地说明了这个问题。

天空盒的侧面没有显示出来,当我查看边缘时(如图所示),看起来图像是紧挨着渲染的,而不是立方体的不同面。

void display ( void )   // Create The Display Function
{
glPushMatrix();
glDepthMask(0);
/* replace this code with your height field implementation */
/* you may also want to precede it with your rotation/translation/scaling */
/* Clear buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt( 0.0, 0.0, 0.0, // eye position
0.1, 0.0, 0.1, // camera direction
0.0, 1.0, 0.0); // up direction

glPushAttrib(GL_ENABLE_BIT);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_BLEND);

glColor4f(1.0, 1.0, 1.0, 1.0);

/*!!!!!!!!!!!!!! FRONT FACE !!!!!!!!!!!!!!!*/

glBindTexture(GL_TEXTURE_2D,frontTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, -0.5f );
glTexCoord2f(1, 0); glVertex3f( -0.5f, 0.5f, -0.5f );
glTexCoord2f(1, 1); glVertex3f( -0.5f, -0.5f, -0.5f );
glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, -0.5f );
glEnd();

/*!!!!!!!!!!!!!! LEFT FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, leftTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( 0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, -0.5f );
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, -0.5f );
glTexCoord2f(0, 1); glVertex3f( 0.5f, -0.5f, 0.5f );
glEnd();

/*!!!!!!!!!!!!!! RIGHT FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, rightTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( -0.5f, 0.5f, -0.5f );
glTexCoord2f(1, 0); glVertex3f( -0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 1); glVertex3f( -0.5f, -0.5f, 0.5f );
glTexCoord2f(0, 1); glVertex3f( -0.5f, -0.5f, -0.5f );
glEnd();

/*!!!!!!!!!!!!!! BACK FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, backTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( -0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f );
glTexCoord2f(0, 1); glVertex3f( -0.5f, -0.5f, 0.5f );

glEnd();

/*!!!!!!!!!!!!!! TOP FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, upTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 1); glVertex3f( -0.5f, 0.5f, -0.5f );
glTexCoord2f(0, 0); glVertex3f( -0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 0); glVertex3f( 0.5f, 0.5f, 0.5f );
glTexCoord2f(1, 1); glVertex3f( 0.5f, 0.5f, -0.5f );
glEnd();

/*!!!!!!!!!!!!!! BOTTOM FACE !!!!!!!!!!!!!!!*/
glBindTexture(GL_TEXTURE_2D, downTextureId); // select which texture to use
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f( -0.5f, -0.5f, -0.5f );
glTexCoord2f(0, 1); glVertex3f( -0.5f, -0.5f, 0.5f );
glTexCoord2f(1, 1); glVertex3f( 0.5f, -0.5f, 0.5f );
glTexCoord2f(1, 0); glVertex3f( 0.5f, -0.5f, -0.5f );
glEnd();

/*!!!!!!!!!!!!!! end of drawing of a textured quad !!!!!!!!!!!!!!!*/
glPopAttrib();
glPopMatrix();

/* Swap buffers, so one we just drew is displayed */
glutSwapBuffers();
}

我觉得我在这里缺少一些基本的东西,但我不确定是什么。代码是或多或少来自教程网站 (http://sidvind.com/wiki/Skybox_tutorial)。代码是在 Ubuntu Linux 上用 g++ 4.5.2 编译的,但是在下面出现了同样的问题 Visual Studio 也是如此。

我还应该声明,上面代码中使用的数字是生成链接图片。

最佳答案

您的纹理需要形成跨立方体边缘的无缝连接。在您提供的屏幕截图中,这些图像没有形成无缝连接(看看天空)。

还要检查您的投影矩阵 - 您是否设置了透视变换?

要设置透视投影(最常见的 3D 应用程序):

glMatrixMode(GL_PROJECTION);  // switch to projection matrix
glLoadIdentity(); // reset projection
gluPerspective(90.0,4.0/3.0,0.01,10.0); // 90deg FOV, 4:3 aspect ratio, 0.01 near clip plane, 10.0 far clip plane
glMatrixMode(GL_MODELVIEW); // back to model matrix

关于c++ - OpenGL Skybox 无法正确渲染边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com