我正在尝试使用 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);
返回 float4(finalcolor,0);
OpenGL 负责选择 mipmap 级别、各向异性过滤等,同时如果我在常规 CPU 进程上进行此操作,我会得到一个用于 finalcolor 的像素,所以我的结果很清晰。
这里有什么建议吗?我想知道手动计算一种mipmaps并通过检查连续像素来选择级别,但不确定这是否是正确的方法,我也怀疑如何处理它,因为它可能在水平方向上快速变化但在垂直方向上变慢或反之亦然。
事实上,我不知道这是如何在 OpenGL/DirectX 内部计算的,因为我使用这种代码很长时间,但从未考虑过内部结构。