【发布时间】:2015-04-05 01:12:58
【问题描述】:
我正在尝试使用 UV gBuffer 对纹理重投影进行编码(这是一个纹理,其中包含在该像素处映射所需的 UV 值)
我觉得看这张图应该很容易理解(我不能附上,因为声誉太低了): http://www.andvfx.com/wp-content/uploads/2012/12/3-objectes.jpg
第一个图像(黑色/黄色/红色/绿色)是 UV gBuffer,它代表 uv 值,第二个是漫反射通道,第三个是期望的结果。
在 OpenGL 上实现这一点非常简单。
绘制一个简单的矩形并将此伪代码用作分段着色器:
float2 newUV=texture(UVgbufferTex,gl_TexCoord[0]).xy; float3 finalcolor=texture(DIFFgbufferTex,newUV);
return float4(finalcolor,0);
OpenGL 负责选择 mipmap 级别、各向异性过滤等,同时如果我在常规 CPU 进程中进行此操作,我会得到一个用于 finalcolor 的像素,所以我的结果很清晰。
这里有什么建议吗?我想知道手动计算一种mipmap并通过检查连续像素来选择级别,但不确定这是否是正确的方法,我也怀疑如何处理它,因为它可能在水平方向上快速变化但在垂直方向上变慢或反之亦然。
事实上,我不知道这是如何在 OpenGL/DirectX 内部计算的,因为我使用这种代码很长时间,但从未考虑过内部结构。
【问题讨论】:
-
你的问题基本上是:OpenGL如何选择要使用的mipmap级别?
标签: c++ opengl graphics texture-mapping uv-mapping