SkyBox 中纹理之间的可见线?

问题描述 投票:0回答:2

我在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();

这是天空盒的一个四边形,是否应该以不同的方式完成?

opengl textures lwjgl
2个回答
0
投票

我遇到了同样的问题,直到我将环绕模式设置为 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);

-1
投票

我在 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)
启用无缝立方体贴图,其中状态是从场景图的根设置的状态。

我希望这有帮助,它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.