所以基本上我正在用 opengl/c++ 制作一个 2D 游戏。我有一个四边形,上面贴有纹理,因为我不能使用两个图像的非幂(或者至少我不应该),我在两个图像的幂内有一个图像,我希望使用纹理映射删除多余的图像。
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 x 450,它被包裹在大小为 1024 x 512 的图像中。我按 800 x 450 的纵横比缩放四边形。我怀疑这会有所作为,但你永远不会知道!
谢谢你的时间。
编辑:这是发生了什么的一个例子。
这是完整映射的完整图像(X 和 Y 中的 0 到 1)蓝色部分高 200 像素,完整图像高 300 像素。
第二个图像是映射到 Y 轴三分之二的图像(即 Y 轴的 0 到 0.6666)。这应该删除顶部的白色,但这不是正在发生的事情。我不认为坐标是回到前面的,因为我在网上获得了几个教程的映射。