【发布时间】:2015-03-15 03:23:00
【问题描述】:
所以我想做的是使用 OpenGL 和 c++ 将纹理渲染到平面上,作为显示图像的一种方式。
但是我需要确保在渲染纹理时没有对纹理进行任何处理,即。抗锯齿、插值、平滑、模糊等。
这是 OpenGL 处理渲染纹理的默认方式吗?或者是否需要设置一些标志才能禁用任何处理?
【问题讨论】:
-
如果您将纹理渲染为与纹理中完全相同的像素数,我认为您只需将渲染偏移 0.5 个像素,以便渲染到每个像素。如果要放大和缩小纹理,则需要适当地指定
GL_TEXTURE_MIN_FILTER和GL_TEXTURE_MAG_FILTER。 -
...其中“适当地”表示
GL_NEAREST -
另一个疯狂的想法:构建一个帧缓冲区对象,将图像准确附加到要绘制的纹理中,然后使用
glBlitFramebuffer。 -
为什么你不想对你的纹理进行最小或放大过滤?你在渲染二维精灵吗?或者制作一种GUI?如果是这样,上述答案/cmets 应该对您有所帮助。确保您确实将 min/mag 过滤器设置为最近,否则(根据我的经验)包装模式,即使您不打算使用它们,否则纹理可能不“完整”并且可能根本无法渲染跨度>
-
谢谢,“GL_TEXTURE_MIN_FILTER”、“GL_TEXTURE_MAG_FILTER”和“GL_NEAREST”是我正在寻找的东西。关于将渲染偏移 0.5 像素和环绕模式的建议也应该很有帮助。我希望这样做,因为我正在对图像进行去拜耳处理,并且不想通过后期处理给人一种相机分辨率的错误印象,而且任何过滤都可能给人一种相机分辨率的错误印象。
标签: c++ opengl textures render-to-texture post-processing