Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么相机移动时纹理会闪烁?_Java_Opengl_Camera_Libgdx - Fatal编程技术网

Java 为什么相机移动时纹理会闪烁?

Java 为什么相机移动时纹理会闪烁?,java,opengl,camera,libgdx,Java,Opengl,Camera,Libgdx,我实现了一个随播放器一起移动的俯视摄像头,使用camera.position.lerp只会稍微慢一点。问题是纹理有点闪烁,因为我缩放了纹理。如果我使用正常大小的纹理,闪烁就会停止。有没有人对如何在不使纹理闪烁(或闪烁)的情况下通过缩放(或纹理缩放-相同的事情)移动相机有什么想法?我使用线性过滤并从atlas加载每个资产。我在多个论坛上看到这个问题,但没有答案。我想加载更高分辨率的纹理并在代码中调整它们的大小,这就是为什么我要问这个问题。您需要在atlas中挤出精灵的边界。“挤出”选项倾向于接近填

我实现了一个随播放器一起移动的俯视摄像头,使用
camera.position.lerp
只会稍微慢一点。问题是纹理有点闪烁,因为我缩放了纹理。如果我使用正常大小的纹理,闪烁就会停止。有没有人对如何在不使纹理闪烁(或闪烁)的情况下通过缩放(或纹理缩放-相同的事情)移动相机有什么想法?我使用线性过滤并从atlas加载每个资产。我在多个论坛上看到这个问题,但没有答案。我想加载更高分辨率的纹理并在代码中调整它们的大小,这就是为什么我要问这个问题。

您需要在atlas中挤出精灵的边界。“挤出”选项倾向于接近填充选项

大多数纹理打包程序都支持该功能,Libgdx将直接从
atlas
文件中获取该信息


这样就可以使用所需的过滤器。

纹理的最小过滤器应该是MipmapLinearLinear或至少是mipmaplinearest。这应该会有很大帮助。闪烁是无处不在,还是只发生在精灵的边缘?是的,这就是问题所在。滤波线性与MipMapLinear不同。我切换了它,现在我没有闪烁。同时将过滤器更改为MipMapLinearLinear会模糊纹理。这是副作用吗?如果你的问题和我想的一样,那闪烁实际上是高频噪音。当采样图像在某个位置有太多可能的纹理可供选择时,就会发生这种情况。相机角度的微小差异将改变为线性纹理过滤一起平均的4个纹理的簇。Mipmapping通过创建较低分辨率的图像来改变这一点,以便在更远的距离进行缩小。你可能会认为它是模糊的,但从技术上说,它是一种抗锯齿的形式。谢谢你的帮助。在这两篇文章的帮助下,我修复了两个问题。但我还有一个(我希望这是最后一个)。正如您所知,我正在使用lerp移动摄影机,但是对于alpha值0.5或更低,这会给摄影机带来缓慢的效果,当视图非常接近目标时,它会抖动。我知道这是因为alpha值太小,但是如果我把它调大,相机移动得太快。有没有办法做一个更好的插值,使相机移动得比播放器慢一点?编辑:抖动在Y轴上更明显。我在libGDX纹理打包机上找不到挤出选项。它可能没有这样的选项。在libGDX TexturePacker中,它只是一个复选框,上面写着“重复填充”。但是看起来你的闪烁更多的是因为没有使用mipmap。不过,您也需要这样做。