我有一个纹理被绘制到四边形。纹理是此屏幕截图左上角的重复图案:http://img828.imageshack.us/img828/3305/blahpv.png opengl纹理只有3px乘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)
答案 0 :(得分:0)
嗯,不知道你应用的旋转,我们只能假设这是某种几乎不形成的莫尔图案(其中干涉网格是你的纹理和光栅化网格)。
为什么你称之为异常(或更重要的是,你想要什么结果)?
如果您想要的只是看起来更好的东西,我建议您在纹理上启用三线滤波。
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
答案 1 :(得分:0)
好的,那么旋转四边形是什么,而不是纹理,对吧?
您可以在着色器中轻松完成此操作(某些部分缺失,如采样器声明)
顶点着色器:
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 ......
答案 2 :(得分:0)
回答#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的(我认为;如果不正确则使用值进行游戏)