所以基本上我正在用opengl / c ++制作2D游戏。我有一个四边形,纹理映射在它上面因为我不能使用两个图像的非幂(或者至少我不应该)我有两个图像的力量内的图像,我希望用纹理映射删除多余的图像。 / p>
GLfloat quadTexcoords[] = {
0.0, 0.0,
0.78125, 0.0,
0.78125, 0.8789,
0.0, 0.8789
};
glGenBuffers(1, &VBO_texcoords);
glBindBuffer(GL_ARRAY_BUFFER, VBO_texcoords);
glBufferData(GL_ARRAY_BUFFER, sizeof(quadTexcoords), quadTexcoords, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
这是我的纹理代码。没什么特别的,我知道。 X坐标(0.7256
)工作正常,它会删除图像右侧的多余图像。但是Y坐标不起作用。我调试了我的游戏,发现正确的坐标被发送到着色器,但它不会映射。它似乎有时相反,但目前还不清楚。
如果我像Y那样给它一个Y的坐标,它会重复多次,但仍会在四边形的顶部留下一条白线。我不知道它可能是什么。
其他细节:我想要映射的图像是800 x 450,它被包裹在1024 x 512的图像中。我将四边形按800的宽高比缩放450.我怀疑这会有所作为但你永远不知道!
感谢您的时间。
编辑:这是一个发生什么事的例子。
这是完全映射的完整图像(X和Y中为0到1)蓝色部分高200像素,完整图像高300像素。
第二个图像是映射到Y轴的三分之二的图像(即Y中的0到0.6666)。这应该删除顶部的白色,但这不是正在发生的事情。当我在线获得几个教程的映射时,我认为坐标不会回到正面。
答案 0 :(得分:2)
它有时似乎正在逆转,但目前还不清楚。
OpenGL假设视口原点位于左下方,纹理坐标在S中运行“与”平面内存纹理元素值,然后是T方向。从本质上讲,这意味着,对于其中一种常见的映射,纹理的起源位于 lower 左侧,与大多数图像处理程序中的左上角原点相反。
因此,在您的情况下,您看到的白色边距,只是您可能应用于底部纹理图像的填充,而不是顶部,您应该放置它。你为什么不能使用NPO2纹理呢?他们得到了广泛支持。
答案 1 :(得分:0)
不是解决问题的真正解决方案,但可能是一种解决问题的方法:
您可以将图像缩放到1024x1024(使图像变形)并使用0-> 1纹理坐标。由于四边形的纵横比为800x450,因此图像应正确显示。