【问题标题】:OpenGL repeating texture causes anomalies when rotatedOpenGL重复纹理在旋转时导致异常
【发布时间】:2010-09-11 05:39:06
【问题描述】:

我有一个纹理被绘制到一个四边形。纹理是此屏幕截图左上角的重复图案:http://img828.imageshack.us/img828/3305/blahpv.png opengl 纹理只有 3px x 9px,我传递的纹理坐标是非常大的数字,它使用 GL_REPEAT 在 3x9 纹理上循环。对截图中看到的奇怪干涉图案有什么解释吗?当四边形完全垂直于相机时,纹理看起来很好(完美重复)......截图是四边形旋转了几度。当四边形改变它与相机的距离或旋转改变时,异常似乎会发生变化,所以我认为它与纹理采样和浮点舍入有关,但我不确定如何修复它。

更新 #1:

我没有使用着色器,但这就是我目前在 python 中为每个顶点做的方式:

(x0, y0, z0) = gluProject(vert[0].x, vert[0].y, 0.0)
x0 /= maskTextureWidth # 3.0
y0 /= maskTextureHeight # 9.0
glMultiTexCoord2f(GL_TEXTURE1_ARB, x0, y0)
glVertex2f(vert[0].x, vert[0].y)

【问题讨论】:

    标签: opengl 3d textures


    【解决方案1】:

    好吧,不知道你应用的旋转,我们只能假设这是某种莫尔条纹,几乎没有形成(干扰网格是你的纹理和光栅化网格)。

    你为什么称这个异常(或者更确切地说,你想要什么结果)?

    如果你想要的只是看起来更好的东西,我建议在你的纹理上打开三线性过滤。

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    

    【讨论】:

    • 不幸的是,使用 GL_LINEAR 或任何 mipmapping 意味着蒙版会变得模糊。我真的需要掩码的每个纹素与屏幕上的单个像素相匹配。像这样:img101.imageshack.us/img101/6499/30831346.png 左图显示了整个屏幕上的蒙版,以及我正在尝试绘制的四边形的轮廓。右图显示了绘制白色四边形(已与蒙版混合)后屏幕的外观。
    【解决方案2】:

    好的,那你要旋转四边形,而不是纹理,对吧?

    您可以在着色器中轻松完成此操作(缺少某些部分,例如采样器声明)

    顶点着色器:

     out vec2 UV;
     main(){
         gl_Position = MVP * Position;
         UV = gl_Position.xy / gl_Position.w;
     }
    

    片段着色器:

    in vec2 UV;
    main(){
        outColor = texture(sampler, UV);
    }
    

    此外,您甚至不必提供纹理坐标:它们是在运行时计算的。

    如果您没有着色器,另一种侵入性较小的可能性是重新计算您的 UV,其方式与顶点着色器中的方式相同。

    还有一种可能是 glBitmap,但这是一些非常旧的 API...

    【讨论】:

    • 查看帖子中的更新 #1,不使用着色器。我的示例是否符合您认为它应该工作的方式?
    • 好的,抱歉,但这不会改变任何事情。如果你同意在 CPU 上每帧预处理每个顶点,这相当于执行我给你的顶点着色器。所以 gl_Position = ... 无论如何都会在固定功能管道中执行,你只需要更新 UV 坐标缓冲区。
    【解决方案3】:

    答案#2:

    使用 glTexGen

    http://www.dei.isep.ipp.pt/~matos/cg/docs/manual/glTexGen.3G.html

    带参数 (GL_S, GL_T), GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR(我认为;如果值不正确,请使用该值)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2021-05-28
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多