opengl SkyBox中纹理之间的可见线条?

mspsb9vt  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

我在opengl中使用五个四边形上的五个纹理制作了一个天空盒,问题是纹理之间的线条(边界)是可见的:

你是怎么摆脱这些线的?

GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex3f(-15.0f,-14.0f,-15.0f); 
GL11.glTexCoord2f(1f, 1.0f);
GL11.glVertex3f(15.0f,-14.0f,-15.0f); 
GL11.glTexCoord2f(1f, 0f);
GL11.glVertex3f(15.0f,16.0f,-15.0f); 
GL11.glTexCoord2f(0.0f, 0f);
GL11.glVertex3f(-15.0f,16.0f,-15.0f); 
GL11.glEnd();

这是一个四分之一的天空盒,它应该做不同的?

lsmd5eda

lsmd5eda1#

我有同样的问题,直到我设置的 Package 模式GL_CLAMP_TO_EDGE。将图像数据提供给着色器后,将此代码放入,似乎应该消失:

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
sbdsn5lh

sbdsn5lh2#

我在OpenSceneGraph中遇到了同样的问题,并采用了OpenGL解决方案,这应该是非常简单的。基本上只要在你的程序开始渲染循环之前使用glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS)就可以了,这样行就应该消失了。
在我的研究中有一些模糊之处,有可能枚举实际上是GL_TEXTURE_CUBEMAP_SEAMLESS,但其中一个应该适合您。在OSG中,这有点复杂,因为您需要#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F,然后使用state->setMode(GL_TEXTURE_CUBE_MAP_SEAMLESS, osg::StateAttribute::ON)启用无缝立方体Map,其中state是从场景图的根设置的状态。
我希望这对你有帮助,它对我有用。

相关问题