问题标签 [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 - 来自 FBO 的 glReadPixels 因多重采样而失败
我有一个带有颜色和深度附件的 FBO 对象,我渲染到它然后从使用中读取glReadPixels()
,我正在尝试向它添加多重采样支持。
而不是glRenderbufferStorage()
我要求glRenderbufferStorageMultisampleEXT()
颜色附件和深度附件。帧缓冲区对象似乎已成功创建并报告为完整。
渲染后,我尝试使用glReadPixels()
. 当样本数为 0 时,即多重采样禁用它可以完美地工作,我得到了我想要的图像。当我将样本数设置为其他值(例如 4)时,帧缓冲区仍然可以正常构建,但glReadPixels()
失败并出现INVALID_OPERATION
有人知道这里可能出了什么问题吗?
编辑: glReadPixels 的代码:
其中 ptr 指向宽度*高度单位的数组。
opengl - 多重采样时如何在 OpenGL 纹理中解析深度值?
我正在使用 FBO 将我的场景渲染为深度纹理 ( GL_DEPTH_COMPONENT
)。当我在我的应用程序中启用多重采样时,这些样本被解析为单个纹素,但是它们是如何组合的呢?是存储到纹理的最近样本的深度,还是样本的平均值?这种行为是否依赖于供应商?
directx - D3D9 中的抗锯齿/多重采样
我正在用 D3D9 编写一个 3d 建模应用程序,我想让它尽可能广泛兼容。这意味着使用很少的硬件相关功能,即多重采样。然而,虽然实时渲染不需要完美无缺,但我确实需要提供漂亮的屏幕截图,如果没有多重采样,看起来很混叠而且很差。
为了生成我的屏幕截图,我在内存中创建了一个临时表面,将场景渲染一次,然后将其保存到文件中。我首先想到的如何实现抗锯齿捕获是创建我的屏幕外模板表面作为多重采样,但当然 DX 不允许这样做,因为设备本身已使用 D3DMULTISAMPLE_NONE 进行了初始化。
首先,这是我如何创建屏幕截图的示例。我知道只保存已经渲染的帧的后缓冲区会更简单,但是我需要能够保存与实际渲染窗口不同尺寸的图像——这就是我这样做的原因。为简洁起见,此处省略了错误检查、恢复状态和释放资源的代码。m_d3ddev 是我的 LPDIRECT3DDEVICE9。
您可以看到对 CreateDepthStencilSurface() 的调用,这是我希望可以用 ie 替换 pp.MultiSampleType 的地方D3DMULTISAMPLE_4_SAMPLES
,但这不起作用。
我的下一个想法是创建一个完全不同的 LPDIRECT3DDEVICE9 作为D3DDEVTYPE_REF
,它始终支持D3DMULTISAMPLE_4_SAMPLES
(无论视频卡如何)。但是,我的所有资源(网格、纹理)都已加载到我的 HAL 设备 m_d3ddev 中,因此我无法使用它们在 REF 设备下渲染场景。请注意,资源可以在 Direct3d9ex (Vista) 下的设备之间共享,但我正在使用 XP。由于有相当多的资源,重新加载所有内容以呈现这一帧,然后卸载它们,对于我的应用程序来说时间效率太低了。
我查看了用于在捕获后对图像进行抗锯齿的其他选项(即 3x3 模糊滤镜),但它们都产生了非常糟糕的结果,所以我真的很想尝试在 D3D 中获得一个抗锯齿场景,如果可能的话......
任何智慧或指示将不胜感激......
谢谢!
opengl - WGL:没有双缓冲+多采样=失败?
wglChoosePixelFormatARB()
我通常使用这些参数(以及其他参数)创建像素格式:
即双缓冲和x4 多重采样。这工作得很好。
但是当我尝试打开双缓冲时:
调用wglChoosePixelFormatARB()
失败(或者说它没有创建任何东西)
当我有效地关闭多重采样时:
我又正常工作了。
是否有一些固有的东西阻止非双缓冲像素格式与多重采样一起使用?
我关闭双缓冲的原因是为了实现不受限制的帧速率。通过双重缓冲,我得到的帧速率最高仅为 60 FPS(这款笔记本电脑 LCD 工作频率为 60Hz)。但是关闭双缓冲后,我可以达到 1500 FPS。有没有办法通过双缓冲来实现这一点?
opengl - 在 OpenGL 中使用多种颜色附件对多采样 FBO 进行 Blitting
我在具有多个颜色附件的 OpenGL 程序中有一个帧缓冲区对象,并且正在尝试将其升级为多采样 FBO。
据我了解,多重采样 FBO 只能使用渲染缓冲区,特别是使用glRenderbufferStorageMultisampleEXT
. 如果我想要在纹理中渲染到这个 FBO,我需要创建第二个带有纹理的 FBO,然后使用glBlitFramebufferEXT
.
我见过的非常非常稀少的例子假设一个单一的颜色附件。当我想对多个颜色附件进行 blit 时该怎么办?
xna - XNA 抗锯齿问题!
我遇到了 XNA 和抗锯齿的问题。我可以使用激活它
但是 - 它只有 2 倍抗锯齿。即使我设置
它仅保持 2 倍抗锯齿。如果我转到我的图形驱动程序设置(NVIDIA GeForce 9800 GT)并将应用程序决定的 Antialiastype 设置为 16x,那么我会得到漂亮而干净的抗锯齿。但如果它设置在“应用程序决定”上,我得到的不会超过 2 倍
有人知道为什么吗?谢谢!
c++ - OpenGL:启用多重采样会在高缩放级别为多边形绘制混乱的边缘
当我使用以下代码时:
然后我启用多重采样,我注意到我的程序不再关心最大 mip 级别。
编辑:它也会渲染最后的 miplevel,这就是问题所在,我不希望它们被渲染。
Edit3: 我测试并确认它根本不会忘记 mip 限制,所以它确实遵循我的 GL_TEXTURE_MAX_LEVEL 设置。...所以问题与 mipmap 无关,我猜...
Edit2:截图,这是世界地图被缩小了很多,使用低角度使效果显示最差,地图下面还有渲染的水平面,所以不可能从地图以外的任何地方获取黑色像素纹理:
替代文字 http://img511.imageshack.us/img511/6635/multisamplingtexturelim.png
Edit4:所有这些图片都应该看起来像右上角的图片(只是边缘更平滑,具体取决于多重采样)。但显然我的代码中有一些可怕的错误。我必须使用 mipmap,mipmap 不是问题,它们工作得很好。
我做错了什么,或者我该如何解决这个问题?
iphone - 如何在 iPhone 上的 OpenGL ES 中激活多重采样?
我正在尝试改进基于 OpenGL ES 的应用程序的“分辨率”。Apple在此处(developer.apple.com)提到 iOS 4 中的 OpenGL ES 支持多重采样……这可以在一定程度上改善图形。 如何启用多重采样?
opengl - 多采样opengl?
我运行了多重采样的样本,但它工作不正确,因为样本缓冲区和样本为 0,所以似乎没有应用多重采样。我应该怎么做才能使它正确?
谢谢。
这是我的代码: