问题标签 [multisampling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 以纹理为目标的 OpenGL PBuffer 多重采样(抗锯齿)
是否可以以纹理为目标进行 PBuffer 多重采样?
是的,我知道这是一项旧技术,但此时我需要提高绘制形状(如矩形和圆形)的平滑度。
我需要这样做以避免重写使用 PBuffer 的大部分应用程序(没有足够的时间)并改进绘制的形状。
qt - QGLWidget 中的透明着色器导致透明背景(透视)
我有一个 QGLWidget:
对于抗锯齿,我最近实现了Samplebuffer
.
对于一些透明网格,我使用了以下GL_BLEND
功能:
我的小部件还在painGL()
函数中绘制了背景:
我遇到的问题是窗口在渲染透明网格的地方变得透明。
我希望将BLEND
其应用于我绘制的彩色背景。
我试图在绘制东西之前用不透明的白色清除小部件,但这没有帮助。
更多解释见这张图片:http: //i.stack.imgur.com/AZx3f.png
在我实施 SampleBuffers 之前,问题并未出现。
c# - 如何在 C# 中使用 SlimDX 获得显卡的多重采样功能?
我想为游戏中的 MSAA 选项提供用户选择。我希望能够检查他们的机器可以提供哪些多重采样选项并仅显示这些选项。我正在使用的应用程序是内置在 WinForms 中的;它实际上不是游戏本身,而是该游戏的启动器。
我找到了 SlimDX.Direct3D11.Device.CheckMultisampleQualityLevels() 但我不确定如何在 WinForms 中获得对 Direct3D11 设备的引用。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff476499%28v=vs.85%29.aspx
opengl - OpenGL:后处理+多重采样=?
我对 OpenGL 相当陌生,并试图弄清楚如何在我的场景渲染中添加后处理阶段。到目前为止,我相信我知道的是我创建了一个 FBO,将场景渲染到该场景,然后我可以使用我的后处理着色器将 FBO 的纹理作为输入渲染到后台缓冲区。
但是,这超出了我的知识范围,是在引入多重采样时。必须对 FBO 进行多重采样。这留下了两种可能性:1. 后处理着色器对子样本进行 1:1 操作以生成最终的多重采样屏幕输出,或者 2. 着色器必须解析多个样本并为每个屏幕像素输出一个屏幕片段。这些怎么做?
c++ - OpenGL 多渲染目标和多重采样
在 OpenGL 中使用多个渲染目标时,我在使用显式多重采样时遇到问题。
我有 4 个渲染目标(位置、漫反射 + 不透明度、法线、镜面反射 + 指数),它们在初始几何传递期间被渲染。
这些都是附加到帧缓冲区对象的非多重采样纹理,然后使用 glDrawBuffers() 设置为渲染目标。这很好用,然后我可以稍后对这些纹理进行采样以获得照明计算所需的信息。迷人的。
我现在想尝试消除一些我得到的锯齿,所以我开始使用多重采样纹理来实现显式 MSAA。然而,当我使用多重采样纹理作为渲染目标时,似乎只有第一个渲染目标被绘制到,其余的保持空白。
除了更改纹理的设置、绑定和在着色器中读取的方式之外,我没有更改任何其他代码。
使用以下代码将多重采样纹理附加到帧缓冲区对象:
还附加了多重采样深度/模板纹理。
然后绑定帧缓冲区并设置绘制缓冲区
然后我像往常一样绘制几何图形。但是,当使用 apitrace 检查时,很明显只有第一个颜色附件被绘制。当我使用常规(非多重采样纹理)时,情况并非如此。
然而,所有 4 个绘图缓冲区仍然在设置中。
opengl - 使用共享边缘的三角形进行多重采样
根据我的理解:
多重采样:考虑我们有 4X 多重采样的原语,只有 1 个样本被原语覆盖。因此,它计算百分比(基于多少样本通过测试的像素覆盖率),即 25% 并与背景颜色混合,我们得到该像素的混合颜色,当执行片段着色器时,该像素被复制到所有 4 个样本。
抗锯齿: OpenGL 计算被图元(点、线或三角形)覆盖的像素数量,并使用它为每个片段生成 alpha 值。此 Alpha 值乘以着色器生成的片段的 Alpha 值,因此当源或目标混合因子包含源 Alpha 项时,它会对混合产生影响。
请纠正我这是错误的。
在多重采样的情况下,我们得到 50-50 的混合,但使用抗锯齿我们得到 25-25-50 的混合,这是怎么回事?
在多重采样的情况下,当我们渲染一个三角形时,它将用 25-75 像素颜色更新 FBO,而当渲染第二个三角形时,它将与背景颜色混合,所以我们应该得到背景颜色而不是 50-50,但这不是案子。
这里通过多重采样,我的意思是使用 glEnable(GL_MULTISAMPLE) 启用它,通过抗锯齿,我的意思是使用 GL_POLYGON_SMOOTH 启用它
r - R创建具有非整数样本大小的多个样本
我正在使用 R 并且我有一个向量,让我们说 vec <- c(1:10)。我需要从这个向量中采样大约 1000 次,但是我需要使用的样本大小是一个非整数,例如 3.66666。显然,当我输入这个时,它会向下舍入到 3。我想做的是在非整数数之外的两个整数的大小(例如 3 和 4)处进行多个样本。希望输出会给出一系列样本,大小在 3 和 4 之间变化,但 1000 个样本的平均样本大小为 3.666666。如果这些可以存储在一个理想的矩阵中。
这更加复杂,因为我有一系列不同的非整数值需要用作样本量,每个值也采样 1000 次。这些当前存储在一个向量中,sample.size <- c(3.6666, 4.25, 5.3……)
最后,向量中的每个样本都具有唯一的采样权重/概率。只取 1 个样本,我知道您可以为原始值中的每个值创建一个表示权重/概率的向量,但是在这种更复杂的情况下,我什至不知道从哪里开始。
我不完全确定这整个过程是否可以完成,我也不知道从哪里开始,但我们将不胜感激。
opengl - 覆盖率的工作
我对覆盖率的工作有疑问。覆盖率值指定像素的哪些样本被基元覆盖。使用 alpha to coverage,我们将 alpha 值与像素的覆盖率值相乘以确定最终的覆盖率。现在 Superbible 指定“如果 66% 的像素被基元覆盖且 alpha 值为 40%,则最终覆盖值将为 60 x 40%,即 25%,对于 8 个样本缓冲区,将覆盖 2 个样本。” 但是它在样本级别是如何工作的?它如何确定要覆盖 8 个样本中的哪些样本?
如果覆盖范围是每个样本的位字段,那么如何对每个样本执行 AND 操作?
opengl - OpenGL 如何解析像素格式基于整数的多采样 FBO 附加颜色缓冲区?
假设我renderbuffer
像这样格式化:
假设我将它附加到 FBO,在其中绘制一些东西,将其传送到非多重采样 FBO 以解决多重采样,最后调用 glReadPixels 从结果图像中取回一些无符号整数(每个像素一个)。
我会得到什么整数?
其中一些可能是多个样本的混合,或者在这种情况下每个像素只选择一个样本(可能是因为在这种情况下基于整数的格式不被认为是可混合的),而其他样本被丢弃?还是发生了其他事情?
opengl - 如何使用多样本帧缓冲区在 OpenGL 中选择几何图形?
(编辑)我使用帧缓冲区进行了工作几何选择。我的目标是在一次绘制调用中绘制巨大的场景,但我需要绘制到多重采样颜色纹理附件 (GL_COLOR_ATTACHMENT0)
并绘制到(编辑的)非多重采样纹理附件 (GL_COLOR_ATTACHMENT1)
。问题是如果我使用多重采样纹理来挑选,由于多重采样,挑选会被破坏。
我将几何 ID 写入片段着色器,如下所示:
(该代码的要点是使用 RGB 空间存储几何 ID,然后读回用于更改立方体颜色的使用)
当我将光标向左移动一个像素时会发生这种情况:
由于立方体像素的 alpha 值:
没有多重采样效果很好。但是多重采样将我的输出颜色相乘,然后几何 id 被破坏,因此它选择具有相乘值的随机立方体。
(编辑)我不能将一个多重采样纹理目标附加到 color0 并将非多重采样纹理目标附加到 color1,它不受支持。我怎样才能在一个draw call中做到这一点?
多重采样不是我的朋友我不确定我是否理解得很好(整个帧缓冲)。无论如何,这种选择几何形状的方式对我来说看起来很糟糕(我的意思是计算 ID 到颜色)。我做得好吗?如何解决多样本问题?有没有更好的办法?
PS:抱歉英语低。:)
谢谢。