【发布时间】:2012-08-17 02:41:23
【问题描述】:
所以基本上我是在用 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)。这应该删除顶部的白色,但这不是正在发生的事情。我不认为坐标是回到前面的,因为我在网上得到了几个教程的映射。
【问题讨论】:
-
定义“不起作用”。 究竟发生了什么?纹理的分辨率是多少?
-
您知道 OpenGL 坐标从 下 左角开始(不是上角),并且 Y 坐标随着您的上升而增加?所以
(0.0,0.0)= 左下,(0.0,1.0)= 左上。我这样说是因为您提到“反向工作”。如果您要翻转纹理的 y 坐标,可能会发生奇怪的事情。 -
我知道它从左下角开始,我已经说明了这一点。你可以看到上面坐标的顺序。告诉我你的想法
-
"这应该去掉顶部的白色" 应该留下什么颜色?
-
图片顶部没有白带,所以图片是白蓝白旗
标签: c++ opengl mapping textures