所以基本上我正在用opengl/C++制作2D游戏。我有一个纹理映射到它的四边形,因为我不能使用两个图像的非功率(或至少我不应该)我有一个图像在两个图像的力量,我希望通过纹理映射去除多余的图像。OpenGL Y纹理坐标表现奇怪
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的坐标20,它会重复多次,但仍然会在四方形的顶部留下一条小白线。我没有想到它会是什么。
其他细节:我试图映射的图像是800乘450,并且它被包裹在一个尺寸为1024×512的图像中。我将800的纵横比缩放为450.我怀疑这会使差异,但你永远不知道!
谢谢你的时间。
编辑:这是一个什么发生的例子。
这是完整的图像(在X和Y 0到1)充分映射的蓝色部分是200个像素高,完整图像是300个像素高。
第二图像是(Y中即0〜0.6666)映射到Y轴上的三分之二的图像。这应该删除顶部的白色,但这不是发生的事情。我不认为这些坐标是前面的,因为我在网上获得了几个教程的映射。
定义“不起作用”。 *究竟*发生了什么?纹理的分辨率是多少? – 2012-08-16 15:48:10
你知道OpenGL的坐标是从**左下角(不是上)开始的,并且Y坐标随着你的增加而增加吗?所以'(0.0,0.0)'=左下,'(0.0,1.0)'=左上。我这样说是因为你提到“逆向工作”。如果你正在翻转纹理的y坐标,可能会发生奇怪的事情。 – KillianDS 2012-08-16 16:00:39
我知道它从左下角开始,我已经解释了这一点。你可以看到上面坐标的顺序。告诉我你的想法 – Constan7ine 2012-08-16 16:13:48