我的问题是基于对Advanced Graphics Progamming using OpenGL的13.7章的阅读。
这些问题的最终目标是手动计算每个像素所需的mipmap级别。
第一个问题:
如何在窗口空间中正确计算纹理坐标?
我不太清楚这本书解释的方式。似乎如果我想正确插值我的纹理坐标,我必须遵循以下步骤:
在我的顶点着色器中:
代码如下:
vec4 clipCoord = MVP * vertexPosition;
gl_Position = clipCoord;
/*
assuming vertexTextureCoord is pass as input to the VS.
So the texture coordinate are in "Texture space".
outTextureCoord and outInvHomogeneousComponent are pass to the FS
*/
outTextureCoord = vertexTextureCoord / clipCoord.w;
outInvHomogeneousComponent = 1/clipCoord.w;
在我的片段着色器中:
代码如下:
vec2 windowSpaceTextureCoordinate =
inTextureCoord * inInvHomogeneousComponent;
这些都是正确的,还是我错过了什么?如果是,为什么?
在阅读这篇文章时,我假设了一些概念,例如通过在VS中第一次用w除以它们,以及在FS中用插值的1 / w对纹理坐标进行双曲线插值的方法。我知道它来自Blinn的文章,但我无法弄清楚它是如何工作的。
第二个问题
假设第一个结果是正确的,本书中使用的方法是否正确计算lod? 如果你阅读这篇文章,我的意思是将之前的结果转换为纹素坐标,并使用结果来执行偏导数公式。