我有一堆缩略图/图标,就在一个纹理地图/精灵工作表中,彼此相接在一起。从像素到像素之间的关系,这些像素从145个像素平方放大到238个屏幕像素平方。在访问纹理坐标时,我希望在盒的边缘得到+-1或2像素的精度,所以我还在缩略图的顶部画了一个4像素的轮廓来隐藏这个可能的工件。但我看到精确性有很大的差异。有时是在一个方向,有时是另一个方向。
我已经查过数学了,我不知道发生了什么事。
缩略图被放大了大约1.64倍。因此,在源纹理坐标下的单个像素关闭可能导致屏幕上大约2像素的消失。顶部的4像素白框是在1-1像素处绘制成碎片关系,并且应该覆盖盒边缘两侧的大约2像素。那部分起作用了。在这里,我关闭了边界,以显示离纹理坐标有多远.
我可以手动调整数字让它消失。但我必须缩小纹理坐标宽度/高度几个源像素,在某些情况下增加(或减去)5或6个像素到起点。我只是想要数学计算出来,或者找出我在这里做错了什么。这类事情让我发疯!
一堆废话要知道。
但我也尝试过GL_LINEAR,没有明显的区别。
====更新====
我突然意识到我做错了几件事,并在这里讨论:OpenGL Texture Coordinates in Pixel Space
一个缩略图的宽度是145。但那将是0-144,145开始下一个。我用的宽度是145,所以这比原来的1像素还要大。使用上述像素类型的数学中心,我们实际上应该从0的中心到144的中心。144.5 - 0.5 =144。
使用他的公式(2i + 1)/(2N),我为每个起始点做了新的偏移量,并以144/2048作为宽度。这使事情变得更好,但在某些领域仍然没有进展。有时还是朝一个方向走,另一个方向走。虽然每个x或y位置是一致的。
使用143宽度证明了更好的效果。但我可以通过手动调整数字来解决所有问题。我想让数学把它做好。
..。或者..。也许这与min/mag过滤有关--尽管我阅读了这方面的内容,而我所做的似乎对这个案例来说是正确的。
发布于 2013-09-27 06:09:00
经过大量的实验,并不得不创建一个网格线的引导纹理,这样我就可以确切地看到每一个纹理有多远。我终于拿到了!
其实很简单。
uniform mat4 u_modelViewProjectionMatrix;
uniform mediump vec2 u_texOffset;
uniform mediump float u_texScale;
attribute vec3 a_vertexPosition;
attribute mediump vec2 a_vertexTexCoord0;
纹理坐标的精度。通过指定中介,它只是修复了自己。我怀疑这也有助于解决我在这个问题上的问题:
Why is a texture coordinate of 1.0 getting beyond the edge of the texture?
一旦我这样做,我必须回到原来的145宽度(这似乎仍然是错误的,但哦,好吧)。至于它的价值,最后,我回到了所有的纹理坐标的原始数学。“像素中心”方法显示的相邻像素比直线/2048显示的要多。
https://stackoverflow.com/questions/19022441
复制相似问题