是什么导致我的立方体面之间的撕裂?

时间:2012-01-03 02:26:49

标签: opengl opengl-3

有点难以看到,但看起来这两个面之间有黑白点。我怀疑它是OpenGL的质量设置之一,但我不知道哪个。或者它是纹理min / mag滤镜(我将它们都设置为线性)?或者我需要mipmapping来解决这个问题?不太清楚我应该寻找什么。


想出如何进行mimapping ....但这似乎会让问题变得更糟。

以下是我的一些设置(它在C#中,但它只是C API上的一个薄包装)

VSync = VSyncMode.On;

GL.Enable(EnableCap.DepthTest);
GL.DepthFunc(DepthFunction.Less);

GL.Enable(EnableCap.CullFace);
GL.CullFace(CullFaceMode.Back);
GL.FrontFace(FrontFaceDirection.Ccw);

GL.ClearColor(Color.MidnightBlue);
GL.Enable(EnableCap.Texture2D);

GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);


texture = new Texture(TextureTarget.Texture2D);
texture.LoadImage2D("checkers.jpg");

GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);

Texture.SetParameter(TextureTarget.Texture2D, TextureMinFilter.LinearMipmapLinear);
Texture.SetParameter(TextureTarget.Texture2D, TextureMagFilter.Linear);
Texture.SetParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge);
Texture.SetParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge);

Texture.SelectActive(TextureUnit.Texture0);

我无法用其他纹理注意到它:

所以也许我不会担心它......我们去照明吧!

1 个答案:

答案 0 :(得分:3)

您可能需要设置纹理包装:

glTexParameterf (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

如果它当前设置为重复,您将获得您正在看到的工件。