- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OpenGL 中是否有一种通用方法,可以在以 native 尺寸(包括边缘像素)绘制时,允许从图集中进行像素完美的 2D 纹理绘制,并在过滤到非 native 尺寸时实现良好的质量缩放?
假设您正在编写某种用于从纹理图集中绘制 Sprite 的系统,以便用户可以指定 Sprite 以及要绘制的 Sprite 的大小和位置。此外,他们可能只想绘制 Sprite 的子矩形。
例如,这是一个 64x64 棋盘:
...并且单独在其纹理图集中:
注意:我们假设视口(viewport)设置为以 1:1 的比例映射到设备像素。
为清楚起见进行编辑:请注意,下面的前 2 种方法无法给出所需的结果,并且专门概述了不起作用的内容。
<强>1。要以原始大小绘制 Sprite ,只需使用 GL_NEAREST
这对于以原始尺寸绘制来说很好,但是当用户以 64x64 以外的尺寸绘制对象时,NEAREST 过滤会产生较差的结果。它还强制纹理像素与像素网格对齐,当在非整数像素位置绘制对象时,结果会很差:
<强>2。启用 GL_LINEAR
(0.5/atlas_size,0.5/atlas_size)
到 (63.5/atlas_size,63.5/atlas_size)
。否则,对于最外面的像素,线性过滤将对图集中 Sprite 的邻居进行采样。
请注意,我们获得了像素精确的绘图,但边缘像素除外,边缘像素与背景混合,因为顶点边界落在像素之间的中间。
编辑:另请注意,此行为还取决于是否启用抗锯齿功能。如果不是,以前的方法实际上确实提供了像素完美的渲染,但当 Sprite 从像素对齐位置移动到子像素位置时,无法提供良好的过渡。在许多情况下,抗锯齿是必须的。
<强>3。纹理图中的垫 Sprite
边缘像素问题的两个明显的解决方案涉及在纹理图集中用 1px 边框填充 Sprite 的边缘。您可以:
这基本上为我们提供了具有线性缩放的像素精确绘图。但是,如果我们随后允许用户仅绘制 Sprite 的子矩形,那么这两种方法都会失败,因为子矩形显然没有所需的填充。
我错过了什么吗?这个问题有通用的解决方案吗?
最佳答案
很难准确地知道您正在寻找的“正确的东西”是什么。如果您有一个 64x64 的 Sprite ,并且想要将其缩放到 65x65 或 63x63,那么再多的过滤也不会让其看起来很好。当您将抗锯齿加入到混合中时,请记住多重采样不是 super 采样,因此您的纹理不会神奇地变得更柔和的内部。
<小时/>也就是说,真正的非最近过滤应该可以通过多重采样很好地开箱即用。我认为您的 GL_LINEAR 方法走在正确的轨道上,但我认为您可能存在实现问题。
特别是,线性过滤应该沿着纹素边界进行过滤。例如,如果您有两个相邻的三角形,则可能会发生这种情况。事实上,您应该期望沿着 Sprite 边缘进行线性过滤,而这种过滤是正确的。
您不应尝试通过调整纹理坐标(以及顶点)来纠正此问题,因为这会错误地在纹理上缩放纹理坐标。相反,我建议在着色器中将纹理坐标限制在所需的范围正/负 0.5/texture_res 内。
您会发现这解决了原生缩放时获得完美像素结果的问题以及良好的放大质量。缩小看起来不错,但我建议使用三线性(mipmap)过滤以获得最佳结果。
关于opengl - OpenGL 中的 2D 绘图 : linear filtering with pixel accuracy at native size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068703/
我是随机森林分类器的新手。我正在使用它对具有两个类别的数据集进行分类。- 特征数量为 512。- 数据比例为1:4。即,75%的数据来自第一类,25%来自第二类。- 我使用了 500 棵树。 分类器产
我正在使用 Keras 2.0 包为 Python 训练一个批处理的神经网络。以下是有关数据和训练参数的一些信息: #samples in train: 414934 #features: 59009
如果我有 2 个标签(1 和 0),并且在我通过 softmax 激活层传递我的 logits 之后,我得到如下内容: [[0.1, 0.9], [0.3, 0.7], [0.333, 0.667]]
我使用accuracy中的tf.metrics函数来解决多个分类问题,并使用logits作为输入。 我的模型输出如下: logits = [[0.1, 0.5, 0.4], [0.
许多资料都描述了计算平方根倒数的“神奇”方法,显然可以追溯到 Quake 游戏。维基百科上有一篇很好的文章:https://en.wikipedia.org/wiki/Fast_inverse_squ
我正在创建一个基于位置的提醒,EKReminder。 对于坐标,我使用 CLGeocoder 将地址转换为 CLLocation。 就提醒本身而言,我认为有两个因素决定了提醒将触发的“区域”(半径/圆
我想获得比函数中的地址范围更准确的地址(来自坐标) geoCoder.reverseGeocodeLocation(location, completionHandler: {} ) 在谷歌地图 AP
'accurate' 和 'precise' 和有什么不一样? 如果有区别,你能举个例子吗 一个准确但不准确的数字 一个精确但不准确的数字 一个既准确又精确的数字 谢谢! 最佳答案 精度是指一个数字传
我有一个简单的两行代码块,它根据在另一个数组中找到的最接近的元素将值添加到一个数组。由于它深埋在 MCMC 中,它被执行了数百万次,我需要它尽可能高效。 下面的代码可以工作,而且很容易解释。基本上:数
我正在尝试使用 TensorFlow(而不是 Keras)重现 Coursera ML 类(class)的 NN 练习。 我发现使用tf.metrics.accuracy计算准确度给出的结果低于我计算
我想了解从 tf.metrics.accuracy 返回的值 考虑这个最小的例子: predictions = tf.constant([[1,0,1], [1,0,1]], dtype=tf.int
我正在尝试了解 tf.metrics.accuracy 的工作原理。我想比较下面给出的函数的批量准确度结果 with tf.name_scope('Accuracy1'): corre
当我使用 Rose 库计算度量时,我得到了召回率、精度和 F1 的度量。然而,当我手动计算时,召回率和精确率测量有所不同。怎么会这样? install.packages("ROSE") library
我有一个容器,有多个 s 在里面,代表页面。当用户滚动浏览这些页面时,我想更新当前页码标签。为此,我发现我可以使用 :in-viewport 选择器。我试着按照这个example ,并想出了这个 j
在使用 TensorFlow Keras 构建分类器时,人们通常会在编译步骤中通过指定 metrics=['accuracy'] 来监控模型准确性: model = tf.keras.Model(..
我正在使用 Python、Tensorflow 和 Keras 在 450x450 RGB watch 正面图像上运行自动编码器(例如 watch_1 )。我的目标是使用自动编码器生成的这些图像的编码
coords.accuracy 是如何测量的,单位是什么? 目标是在查找位置时使用它来确定误差半径。 最佳答案 通常以米为单位表示。 Geolocation API specified by W3C说
在使用 HTML5 地理定位 API 时,除了纬度和经度之外,我还获得了“以米为单位的位置精度”。这到底是什么意思(米不是精度单位)? 我假设它应该被解读为“以 p 的概率请求是在返回位置的 a 米范
所以,我正在构建一个基本的 Keras 文本分类器,但无论我做什么,我都无法使验证准确率高于 49-50%(或更低)。我的训练准确率攀升非常正常,从 50% 左右开始,在 4-5 个 epoch 后攀
我收到以下错误,我不知道可能出了什么问题。 我将 R Studio 与适用于 Windows 8.1 的 3.1.3 版 R 一起使用,并使用 Caret 包进行数据挖掘。 我有以下训练数据: str
我是一名优秀的程序员,十分优秀!