gpt4 book ai didi

c++ - OpenGL Y 纹理坐标表现异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:30 25 4
gpt4 key购买 nike

基本上我是在用 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 坐标不起作用。我已经调试了我的游戏并发现正确的坐标被发送到着色器但它不会映射。它有时似乎在反向工作,但非常不清楚。

如果我给它一个像 20 这样的 Y 坐标,它会重复多次,但仍然会在四边形的顶部留下一条小白线。我一点也不知道它可能是什么。

其他细节:我试图映射的图像是 800 x 450,它被包裹在尺寸为 1024 x 512 的图像中。我按 800 x 450 的纵横比缩放四边形。我怀疑这会有所作为但你永远不知道!

感谢您的宝贵时间。

编辑:这是正在发生的事情的一个例子。

enter image description here

这是完全映射的完整图像(X 和 Y 中的 0 到 1)蓝色部分高 200 像素,完整图像高 300 像素。

enter image description here

第二个图像是映射到 Y 轴的三分之二(即 Y 中的 0 到 0.6666)的图像。这应该去除顶部的白色,但事实并非如此。网上找了好几个教程的图,我觉得坐标不是倒过来的。

最佳答案

It seems to be working in reverse sometimes but it is very unclear.

OpenGL 假定视口(viewport)原点在左下角,纹理坐标“与”S 方向的平面内存纹素值一起运行,然后是 T 方向。从本质上讲,这意味着,对于一种常用的映射,纹理的原点位于左,这与大多数图像处理程序中的左上原点相反。

因此,在您的情况下,您看到的白色边距只是您可能应用于底部纹理图像的填充,而不是应该放置在顶部的顶部。为什么你不能使用 NPO2 纹理呢?它们得到广泛支持。

关于c++ - OpenGL Y 纹理坐标表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com